zoukankan      html  css  js  c++  java
  • hadoop多次搭建后,完整总结(累死宝宝了,搭建了十多遍了)

    1、安装JDK
    1.1上传
    运用软件FileZilla,将windows上的jdk压缩包放到linux的root目录下

    1.2解压jdk
    #创建文件夹
    mkdir /usr/java(不要挂在在“/”系统盘下)
    #解压
    tar -zxvf jdk-7u55-linux-i586.tar.gz -C /usr/java/(提前在/usr/目录下创建一个java的文件夹)

    1.3将java添加到环境变量中
    vim /etc/profile
    #在文件最后添加
    export JAVA_HOME=/usr/java/jdk1.7.0_55
    export PATH=$PATH:$JAVA_HOME/bin

    #刷新配置
    source /etc/profile

    2、安装Hadoop
    2.1上传hadoop安装包
    运用软件FileZilla,将windows上的压缩包放到linux的root目录下

    2.2解压hadoop安装包
    在root目录下
    mkdir /cloud
    #解压到/cloud/目录下
    tar -zxvf hadoop-2.2.0.tar.gz -C /cloud/

    2.3修改配置文件(5个)目录 /cloud/hadoop-2.2.0/etc/hadoop
    第一个:hadoop-env.sh
    export JAVA_HOME=/usr/java/jdk1.6

    第二个:core-site.xml
    <configuration>
    <!-- 指定HDFS老大(namenode)的通信地址 -->
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://northbigpenguin:9000</value>
    </property>
    <!-- 指定hadoop运行时产生文件的存储路径 -->
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/cloud/hadoop-2.2.0/tmp</value>
    </property>
    </configuration>

    第三个:hdfs-site.xml
    <configuration>
    <!-- 设置hdfs副本数量 -->
    <property>
    <name>dfs.replication</name>
    <value>1</value><!--默认是3个,这里改为一个-->
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///data/hdfs/data</value>
    </property>
    </configuration>


    第四个:mapred-site.xml.template 需要重命名: mv mapred-site.xml.template mapred-site.xml
    <configuration>
    <!-- 通知框架MR使用YARN -->
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <!--这个必须加载-->
    <property>
       <name>mapred.job.tracker</name>
       <value>northbigpenguin:9001</value>
    </property>
    </configuration>

    第五个:yarn-site.xml

    <configuration>
    <!-- reducer取数据的方式是mapreduce_shuffle -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>northbigpenguin</value>
    </property>
    </configuration>

    3、将hadoop添加到环境变量
    vim /etc/profile
    export JAVA_HOME=/usr/java/jdk1.6
    export HADOOP_HOME=/root/cloud/hadoop-2.2.0
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin
    完成过后部署一下,才能生效
    source /etc/profile

    4、格式化HDFS(namenode)第一次使用时要格式化
    #过时但还可以使用:hadoop namenode -format
    目录/cloud/hadoop-2.2.0
    hdfs namenode -format 使用这个(注:整个配置中此句子仅仅执行一次,否则会出很多错误)
    注意:
    (1)如果报错:
    -bash: hadoop: command not found
    说明:
    hadoop的路径配置有误。查看vim /etc/profile的export HADOOP_HOME=/root/cloud/hadoop-2.2.0(使用绝对路径)
    不知道绝对路径:
    进入/hadoop-2.2.0/bin 然后输入pwd

    5、启动hadoop
    5.1 初始化HDFS(格式化文件系统)
    (1)查找命令:
    which hadoop
    which hdfs
    (2)到hdfs相对的bin目录下:
    cd /root/Download/hadoop/hadoop-2.2.0/bin
    (3)退到/hadoop-2.2.0所在目录
    hdfs namenode -format (hadoop namenode -format(过时了,但是可用))

    5.2启动hadoop
    (1)进入目录/root/cloud/hadoop-2.2.0/sbin

    (2)先启动HDFS(可以用.../sbin/start-all.sh但是需要多次输入密码)

    (3)第二种启动方法:
    先启动HDFS
    ../sbin
    ./start-dfs.sh

    再启动YARN
    ../sbin
    ./start-yarn.sh
    资源无法访问和stop错误都是重启

    /data/hdfs/data/current

    (2)报错:Error: Cannot find configuration directory:
    进入vim /etc/profile
    就把所有的路径都配置进去
    export JAVA_HOME=/usr/java/jdk1.6
    export HADOOP_HOME=/root/cloud/hadoop-2.2.0
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_YARN_HOME=$HADOOP_HOME
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export PATH=$PATH::$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin:$HADOOP_HOME/lib
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
    再次配置一下
    source /etc/profile
    6、然后关闭服务器
    ./stop-all.sh
    重新启动服务:
    ./start-all.sh

    最后出现:
    starting yarn daemons
    starting resourcemanager, logging to /root/cloud/hadoop-2.2.0/logs/yarn-root-resourcemanager-northbigpenguin.out
    localhost: starting nodemanager, logging to /root/cloud/hadoop-2.2.0/logs/yarn-root-nodemanager-northbigpenguin.out
    这样的字样就是配置成功

    7、验证是否启动成功
    (1)数据传输成功验证:
    使用jps命令验证
    目录/root/cloud/hadoop-2.2.0/sbin
    下输入:
    jps
    出现如下六个的文件为配置成功:
    27408 NameNode
    28218 Jps
    27643 SecondaryNameNode
    28066 NodeManager
    27803 ResourceManager
    27512 DataNode

    在主节点执行jps,看到3个进程,分别是NameNode、SecondaryNameNode、JobTracker
    在从节点执行jps,看到2个进程,分别是DataNode、TaskTracker
    (2)网页测试:
    在这个文件中添加linux主机名和IP的映射关系(本机windows系统下)
    C:WindowsSystem32driversetchosts
    192.168.1.110(LInux的IP地址) localhost(linux主机名)
    访问:northbigpenguin:50070 ((hdfs的web页面)
    northbigpenguin:8088 (MR管理界面)

    网页测试不显示网页需要关闭防火墙
    关闭防火墙
    #查看防火墙状态
    service iptables status
    #关闭防火墙
    service iptables stop
    #查看防火墙开机启动状态
    chkconfig iptables --list
    #关闭防火墙开机启动
    chkconfig iptables off

    注意:
    页面访问:
    Live Nodes-->Browse the filesystem 需要配置本地连接否则会无法访问
    http://northbigpenguin:50075/browseDirectory.jsp?namenodeInfoPort=50070&dir=/&nnaddr=localhostip:9000
    点击后跳转到这个界面

    页面数据测试:
    上传文件到hadoop (文件是临时的,服务器关闭,文件消失):
    hadoop fs -put /root/Download/jdk-6u45-linux-x64.bin hdfs://northbigpenguin:9000/jdk
    然后在界面可以看到:
    http://northbigpenguin:50075/browseDirectory.jsp
    命令行下载上传的文件:
    hadoop fs -get /root/Download/jdk-6u45-linux-x64.bin hdfs://northbigpenguin:9000/jdk
    运行实例
    (1)先在本地磁盘建立两个输入文件 file01和file02
    $echo "Hello World Bye World" > file01
    $echo "Hello Hadoop Goodbye Hadoop" > file02

    (2)在hdfs中建立一个input目录:$hadoop fs -mkdir input
    (3)将file01和file02拷贝到hdfs中:
    $hadoop fs -copyFromLocal /home/zhongping/file0* input
    (4)执行wordcount:
    $hadoop jar hadoop-0.20.2-examples.jar wordcount input output
    (5)完成之后,查看结果
    $hadoop fs -cat output/part-r-00000
    NameNode
    Jps
    SecondaryNameNode
    NodeManager
    ResourceManager
    DataNode关系和联系


    yarn负责资源的调度
    ResourceManager(负责管理)是yarn的上一级
    NodeManager(负责干活)(可以是一个,集群时是多个)是yarn的低一级
    SecondaryNameNode 是hadoop1.0的解决HA(高可靠性)的方案
    SecondaryNameNode不是NameNode的一个热备(namenode坏了SecondaryNameNode不执行)
    SecondaryNameNode是NameNode的助理(完成数据同步,但不是实时的)

    hdfs
    NameNode是hdfs的上一级
    DataNode(负责存放数据)是hdfs的下一级


    错误:
    WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where
    applicable
    系统版本不兼容

    部署Hadoop的集群环境为? 操作系统 CentOS 5.8??? hadoop版本为cloudera?? hadoop-0.20.2-cdh3u3
    集群中设置支持gzip lzo压缩后,在对压缩文件进行读取或者对输入文件压缩的时候要使用到hadoop的本地库,本地库的默认位置在
    $HADOOP_HOME/lib/native/Linux-amd64-64?? (64位操作系统)
    $HADOOP_HOME/lib/native/Linux-i386-32?? (32位操作系统)
    文件夹中的libhadoop.so文件,就是hadoop的本地库。
    如果本地库不存在,或者本地库与当前操作系统的版本不一致的时候,会报下面的错误:
    11/09/20 17:29:49 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java
    classes where applicable
    增加调试信息设置
    (开启:export HADOOP_ROOT_LOGGER=DEBUG,console
    关闭:export HADOOP_ROOT_LOGGER=INFO,console)
    $ export HADOOP_ROOT_LOGGER=DEBUG,console
    $ hadoop fs -text /test/data/origz/access.log.gz
    2012-04-24 15:55:43,269 WARN org.apache.hadoop.util.NativeCodeLoader: Unable to load native-hadoop library for your
    platform... using builtin-java classes where applicable error libhadoop.so? /lib64/libc.so.6 required (libc 2.6)???
    /usr/local/hadoop/lib/native/Linux-amd64-64?
    说明系统中的glibc的版本和libhadoop.so需要的版本不一致导致
    查看系统的libc版本?
    # ll /lib64/libc.so.6
    lrwxrwxrwx 1 root root 11 Apr 24 16:49 /lib64/libc.so.6 -> libc-2.5.so
    系统中的版本为2.5 将系统中的glibc升级为2.9
    下载glibc wget? http://ftp.gnu.org/gnu/glibc/glibc-2.9.tar.bz2
    下载glibc-linuxthreads wget http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.5.tar.bz2
    解压 $tar -jxvf glibc-2.9.tar.bz2 $cd glibc-2.9
    $tar -jxvf ../glibc-linuxthreads-2.5.tar.bz2
    $cd .. $export CFLAGS="-g -O2"
    $./glibc-2.7/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include
    --with-binutils=/usr/bin
    $make
    #make install
    安装编译过程中需要注意三点:
    1、要将glibc-linuxthreads解压到glibc目录下。
    2、不能在glibc当前目录下运行configure。
    3、加上优化开关,export CFLAGS="-g -O2",否则会出现错误
    安装完后,可以查看ls -l /lib/libc.so.6已升级
    lrwxrwxrwx 1 root root 11 Apr 24 16:49 /lib64/libc.so.6 -> libc-2.9.so
    测试本地库是否升级
    $ export HADOOP_ROOT_LOGGER=DEBUG,console
    $ hadoop fs -text /test/data/origz/access.log.gz
    12/04/25 08:54:47 INFO lzo.LzoCodec: Successfully loaded & initialized native-lzo library [hadoop-lzo rev
    6bb1b7f8b9044d8df9b4d2b6641db7658aab3cf8]
    12/04/25 08:54:47 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
    12/04/25 08:54:47 INFO util.NativeCodeLoader: Loaded the native-hadoop library 12/04/25 08:54:47 INFO zlib.ZlibFactory:
    Successfully loaded & initialized native-zlib library
    12/04/25 08:54:47 DEBUG fs.FSInputChecker: DFSClient readChunk got seqno 0 offsetInBlock 0 lastPacketInBlock false
    packetLen 132100
    可以看到将glibc升级后不再报错,已经成功加载本地库

    功能练习一:
    下载文件命令
    hadoop fs -get hdfs://northbigpenguin:9000/jdk1.6 /root/jdk1.6
    上传文件命令
    hadoop fs -put jdk-6u45-linux-x64.tar hdfs://northbigpenguin:9000/jdk1.6

    上传文件需要是rar文件,没有自己创建一个
    (1)下载一个jdk。无论什么压缩包,window是本地解压后,打包成.zip文件
    (2)将该文件上传到linux系统
    (3)系统内解压
    unzip jdk-6u45-linux-x64.zip
    (4)生成文件夹 jdk-6u45-linux-x64
    (5)将该文件夹压缩成tar
    tar -cvf jdk-6u45-linux-x64.tar jdk-6u45-linux-x64
    (6)上传到linux的hadoop上
    (7)下载文件
    (8)linux中解压
    tar -xzvf jdk1.6

    不好使就用
    tar -xvf jdk1.6(出现错误用这个)


    功能练习二:
    统计单词数量的上传文件
    进入目录:
    /root/cloud/hadoop-2.2.0/share/hadoop/mapreduce
    vi wordCount.txt
    写入 单词十二个
    HELLO WORLD
    HELLO BABY
    HELLO a
    HELLO B
    HELLO C
    HELLO D
    wc wordCount.txt
    得到:
    6(行) 12(单词数) 55(字符) wordCount.txt
    上传到服务器
    hadoop fs -put wordCount.txt hdfs://northbigpenguin:9000/wordCount
    查看是否上传成功:
    hadoop fs -ls hdfs://northbigpenguin:9000/

    目录/mapreduce下
    执行:
    hadoop jar hadoop-mapreduce-examples-2.2.0.jar wordcount hdfs://northbigpenguin:9000/wordCount hdfs://northbigpenguin:9000/Cout
    hadoop jar(命令) jar包 命令(统计单词数量) 输入位置 输出位置

    Map-Reduce Framework
    Map input records=6
    Map output records=12
    Map output bytes=103
    Map output materialized bytes=73
    Input split bytes=102
    Combine input records=12
    Combine output records=7
    Reduce input groups=7
    Reduce shuffle bytes=73
    Reduce input records=7
    Reduce output records=7
    Spilled Records=14
    Shuffled Maps =1
    Failed Shuffles=0
    Merged Map outputs=1
    GC time elapsed (ms)=370
    CPU time spent (ms)=3150
    Physical memory (bytes) snapshot=315904000
    Virtual memory (bytes) snapshot=1650171904
    Total committed heap usage (bytes)=136122368
    Shuffle Errors
    BAD_ID=0
    CONNECTION=0
    IO_ERROR=0
    WRONG_LENGTH=0
    WRONG_MAP=0
    WRONG_REDUCE=0
    File Input Format Counters
    Bytes Read=55
    File Output Format Counters
    Bytes Written=39
    成功标志


    8、配置ssh免登陆
    远程创建文件
    ssh 10.129.205.237 mkdir /root/xiaobaitu

    两台机器都需要配置ssh才能执行远程连接:

    (1)基于 RedHat / CentOS 的系统 :
    下载安装(完成后会装在root目录下:执行命令ls -a查看隐藏文件.ssh):
    # yum install openssh-server openssh-clients
    OpenSSH Server安装完成后在/etc/init.d目录下应该会增加一个名为sshd的服务。
    chkconfig --list sshd

    手动启动sshd服务,方便后面客户端的连接:
    $ /etc/init.d/sshd start
    (2)方法二:安装SSH:
    yum install ssh
    启动SSH:
    service sshd start
    设置开机运行:
    chkconfig sshd on


    1、创建:
    mkdir /root/.ssh

    2、生成ssh免登陆密钥
    进入到我的home目录
    cd ~/.ssh
    3、生产密钥
    ssh-keygen -t rsa (四个回车)
    执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
    将公钥拷贝到要免登陆的机器上
    cp id_rsa.pub authorized_keys或者ssh-copy-id northbigpenguin
    或者
    将公钥拷贝到要免登陆的机器上
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    注意:
    公钥必须叫authorized_keys,系统默认的

    登录本机不输密码
    ssh northbigpenguin

    退出登录
    exit

    查看公钥
    cat ~/.ssh

    单项连接:
    拷贝自己的公钥到其他你想不用密码登录的机器上
    ssh-copy-id 10.129.205.237(想要免密码的机器)

    想访问别人,就是考自己的密码给别人,反之考别人的密码给自己
    此时会弹出对话框
    root@10.129.205.237's password:
    输入对方的密码
    会返回:
    Now try logging into the machine, with "ssh '10.129.205.237'", and check in:
    .ssh/authorized_keys
    to make sure we haven't added extra keys that you weren't expecting.
    表示成功
    ssh 10.129.205.237 变成别人机器登录
    exit退出变回自己机器

    双向连接:
    互相有对方的公钥
    另一台机器的 ssh-keygen -t rsa 生成了id_rsa(私钥)、id_rsa.pub(公钥)外加authorized_keys(第一台机器的公钥)
    authorized_keys是设置的别名以防止重复覆盖
    所以此时只需 执行
    ssh-copy-id 10.129.205.250(另一台机器的ip)
    然后输入器确认和密码
    Are you sure you want to continue connecting (yes/no)? yes
    root@10.129.205.250's password:
    测试连接:
    ssh 10.129.205.250

  • 相关阅读:
    JS-得到屏幕宽高、页面宽高
    CSS3-border-radius 属性
    从30岁到35岁:为你的生命多积累一些厚度【转载】
    HTML5-IOS WEB APP应用程序(IOS META)
    HTML-Meta中的viewport指令
    EasyUI-window包含一个iframe,在iframe中如何关闭window
    JS-为句柄添加监听函数
    EasyUI-EasyUI框架入门学习
    Linux下的C编程
    ***经典笔试题
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/6257473.html
Copyright © 2011-2022 走看看