Hadoop 2.7.2完全分布式的搭建

一 生产环境描述

1 网络环境

  • hadoopmaster 192.168.1.159
  • hadoopslave1 192.168.1.76
  • hadoopslave2 192.168.1.166

2 软件环境

  • JDK 7U79
  • Hadoop 2.7.2

二 hadoopmaster主机配置

1 JDK设置

  1. chu888chu888@hadoopmaster:~$ ls
  2. jdk-7u79-linux-x64.gz
  3. chu888chu888@hadoopmaster:~$ sudo tar xvfz jdk-7u79-linux-x64.gz
  4. chu888chu888@hadoopmaster:~$ ls
  5. jdk1.7.0_79 jdk-7u79-linux-x64.gz
  6. chu888chu888@hadoopmaster:~$ sudo cp -r jdk1.7.0_79/ /usr/lib/jvm/
  7. chu888chu888@hadoopmaster:~$ cd /usr/lib/jvm
  8. chu888chu888@hadoopmaster:/usr/lib/jvm$ ls
  9. bin db jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
  10. COPYRIGHT include lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
  11. chu888chu888@hadoopmaster:/usr/lib/jvm$
  12. chu888chu888@ubuntu1:/usr/lib/jvm$ sudo nano /etc/profile
  13. 修改内容如下,注意大小写,在环境变量中的配置中,有一点需要指出就是如果只是编辑~/.profile的话这个变量的生效只是针对当前用户的.如果想要其在全局生效的话,建议更新/etc/profile,这是一个全局的.

/etc/profile的内容如下:

  1. export JAVA_HOME=/usr/lib/jvm/
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  4. export PATH=${JAVA_HOME}/bin:$PATH

这里面有一个小的体验技巧,我建议将所有需要的环境变量配置加入到/etc/profile中,这是全局变量.

  1. export JAVA_HOME=/usr/lib/jvm/
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  4. export PATH=${JAVA_HOME}/bin:$PATH
  5. export JAVA_HOME=/usr/lib/jvm/
  6. export HADOOP_INSTALL=/usr/local/hadoop
  7. export PATH=$PATH:$HADOOP_INSTALL/bin
  8. export PATH=$PATH:$JAVA_HOME/bin
  9. export PATH=$PATH:$HADOOP_INSTALL/sbin
  10. export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
  11. export HADOOP_COMMON_HOME=$HADOOP_INSTALL
  12. export HADOOP_HDFS_HOME=$HADOOP_INSTALL
  13. export YARN_HOME=$HADOOP_INSTALL
  14. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
  15. export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

还有一个问题就是,在启动hadoop的时候经常会出现,找不到JAVA_HOME的问题,这个问题可以通过修改hadoop环境变量来解决,直接写死变量就可以了.

测试环境变量是不是生效

  1. chu888chu888@hadoopmaster:/usr/lib/jvm$ source /etc/profile
  2. chu888chu888@hadoopmaster:/usr/lib/jvm$ env
  3. XDG_SESSION_ID=1
  4. TERM=xterm-256color
  5. SHELL=/bin/bash
  6. SSH_CLIENT=192.168.1.23 49818 22
  7. OLDPWD=/home/chu888chu888
  8. SSH_TTY=/dev/pts/0
  9. JRE_HOME=/usr/lib/jvm//jre
  10. USER=chu888chu888
  11. LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
  12. MAIL=/var/mail/chu888chu888
  13. PATH=/usr/lib/jvm//bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
  14. PWD=/usr/lib/jvm
  15. JAVA_HOME=/usr/lib/jvm/
  16. LANG=en_US.UTF-8
  17. SHLVL=1
  18. HOME=/home/chu888chu888
  19. LANGUAGE=en_US:en
  20. LOGNAME=chu888chu888
  21. CLASSPATH=.:/usr/lib/jvm//lib:/usr/lib/jvm//jre/lib
  22. SSH_CONNECTION=192.168.1.23 49818 192.168.1.159 22
  23. LESSOPEN=| /usr/bin/lesspipe %s
  24. XDG_RUNTIME_DIR=/run/user/1000
  25. LESSCLOSE=/usr/bin/lesspipe %s %s
  26. _=/usr/bin/env
  27. chu888chu888@hadoopmaster:/usr/lib/jvm$ java -version
  28. java version "1.7.0_79"
  29. Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
  30. Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
  31. chu888chu888@hadoopmaster:/usr/lib/jvm$

2 IP设置

  1. chu888chu888@hadoopmaster:/etc/network$ ls
  2. if-down.d if-post-down.d if-pre-up.d if-up.d interfaces interfaces.d run
  3. chu888chu888@hadoopmaster:/etc/network$ sudo nano interfaces

interfaces的内容如下

  1. auto lo
  2. iface lo inet loopback
  3. auto eth0
  4. iface eth0 inet static
  5. address 192.168.1.159
  6. netmask 255.255.255.0
  7. gateway 192.168.1.1

/etc/resolv.conf的内容

  1. nameserver 192.168.1.1

3 Hadoop相关环境变量的设置

  1. 创建hadoop用户组
  2. 创建hadoop用户
  3. chu888chu888@hadoopmaster:~$ sudo addgroup hadoop
  4. [sudo] password for chu888chu888:
  5. Adding group `hadoop' (GID 1001) ...
  6. Done.
  7. chu888chu888@hadoopmaster:~$ sudo adduser -ingroup hadoop hadoop
  8. Adding user `hadoop' ...
  9. Adding new user `hadoop' (1001) with group `hadoop' ...
  10. Creating home directory `/home/hadoop' ...
  11. Copying files from `/etc/skel' ...
  12. Enter new UNIX password:
  13. Retype new UNIX password:
  14. passwd: password updated successfully
  15. Changing the user information for hadoop
  16. Enter the new value, or press ENTER for the default
  17. Full Name []:
  18. Room Number []:
  19. Work Phone []:
  20. Home Phone []:
  21. Other []:
  22. Is the information correct? [Y/n] y
  23. hadoop用户添加权限,打开/etc/sudoers文件
  24. root ALL=(ALL:ALL) ALL
  25. hadoop ALL=(ALL:ALL) ALL

4 hosts文件修改

所有的主机的hosts都需要修改,在这里我吃了一个大亏,如果在etc配置文件中直接用Ip的话,可能会出现Datanode链接不上Namenode的现象.

  1. 127.0.0.1 localhost
  2. 192.168.1.159 hadoopmaster
  3. 192.168.1.76 hadoopslave1
  4. 192.168.1.166 hadoopslave2

5 SSH无密码登录

步骤一用ssh-key-gen在hadoopmaster主机上创建公钥与密钥

  1. 需要注意一下,一定要用hadoop用户生成公钥,因为我们是免密钥登录用的是hadoop
  2. hadoop@hadoopmaster:~$ ssh-keygen -t rsa
  3. Generating public/private rsa key pair.
  4. Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
  5. Created directory '/home/hadoop/.ssh'.
  6. Enter passphrase (empty for no passphrase):
  7. Enter same passphrase again:
  8. Your identification has been saved in /home/hadoop/.ssh/id_rsa.
  9. Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
  10. The key fingerprint is:
  11. cf:98:06:01:29:81:ff:82:5b:d3:6d:5d:53:b6:a7:75 hadoop@hadoopmaster
  12. The key's randomart image is:
  13. +--[ RSA 2048]----+
  14. | ..... |
  15. |. . .. o |
  16. | . . . o . |
  17. | . . o . o E|
  18. | . o ...S. . + . |
  19. |. + o o..= . |
  20. | o o . + o |
  21. |. . |
  22. | |
  23. +-----------------+

步骤二保证hadoopmaster登录自已是有效的

  1. cd .ssh
  2. cat ./id_rsa.pub >> ./authorized_keys

步骤三将公钥拷贝到其他主机上

  1. scp ~/.ssh/id_rsa.pub hadoop@hadoopslave1:/home/hadoop/
  2. scp ~/.ssh/id_rsa.pub hadoop@hadoopslave2:/home/hadoop/

步骤四 在其他二个节点上做的工作

  1. mkdir ~/.ssh # 如果不存在该文件夹需先创建,若已存在则忽略
  2. cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
  3. rm ~/id_rsa.pub # 用完就可以删掉了

6 资源限制配置

此步骤要求在hadoopmaster hadoopslave1 hadoopslave2都要进行配置,以防止处理达到机器文件上限

1通过修改/etc/security/limits.conf追击参数进行配置

HBASE和其他的数据库软件一样会同时打开很多文件,Linux默认的ulimit值是1024,这对HBASE来说太小了,当使用诸如bulkload这种工具导入数据的时候会得到这样的异常信息:java.io.IOException:Too many open files.我们需要改变这个值.这是对操作系统的操作,而不是通过HBASE配置文件完成的,我们可以大致估算ulimit值需要配置为多大,例如:每个列族至少有一个存储文件(HFile),每个被加载的Region可能管理多达5或6个列族所对应的存储文件,用于存储文件个数乘于列族数再乘以每个RegionServer中的RegIon数量得到RegionServer主机管理的存储文件数量.假如每个Region有3个列族,每个列族平均有3个存储文件,每个RegionServer有100个region,将至少需要33100=900个文件.这些存储文件会被客户端大量的操作,涉及大量的磁盘操作.

  1. #* soft core 0
  2. #root hard core 100000
  3. #* hard rss 10000
  4. #@student hard nproc 20
  5. #@faculty soft nproc 20
  6. #@faculty hard nproc 50
  7. #ftp hard nproc 0
  8. #ftp - chroot /ftp
  9. #@student - maxlogins 4
  10. hadoop - nofile 65535
  11. hadoop - nproc 32000

2 通过修改 hdfs-site.xml解决同时处理文件上限的参数
Hadoop的Datanode有一个用于设置同时处理文件的上限个数的参数,这个参数叫xcievers,在启动之前,先确认有没有配置hadoop的这个参数,默认值是256,这对于一个任务很多的集群来说,实在太小了.

  1. <property>
  2. <name>dfs.datanode.max.xcievers</name>
  3. <value>12500</value>
  4. </property>

三 hadoopslave1 2主机配置

1 JDK安装

同上

2 IP设置

同上

3 Hadoop相关环境变量的设置

同上

4 hosts文件修改

同上

5 SSH无密码登录

同上

四 hadoopmaster的安装

1 安装

以下操作都要以hadoop用户身份进行

  1. chu888chu888@hadoopslave1:~$ sudo tar xvfz jdk-7u79-linux-x64.gz
  2. hadoop@hadoopmaster:~$ sudo cp -r hadoop-2.7.2 /usr/local/hadoop
  3. hadoop@hadoopmaster:~$ sudo chmod -R 775 /usr/local/hadoop/
  4. hadoop@hadoopmaster:~$ sudo chown -R hadoop:hadoop /usr/local/hadoop

这里面有一个小的体验技巧,我建议将所有需要的环境变量配置加入到/etc/profile中,这是全局变量.

  1. export JAVA_HOME=/usr/lib/jvm/
  2. export JRE_HOME=${JAVA_HOME}/jre
  3. export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
  4. export PATH=${JAVA_HOME}/bin:$PATH
  5. export JAVA_HOME=/usr/lib/jvm/
  6. export HADOOP_INSTALL=/usr/local/hadoop
  7. export PATH=$PATH:$HADOOP_INSTALL/bin
  8. export PATH=$PATH:$JAVA_HOME/bin
  9. export PATH=$PATH:$HADOOP_INSTALL/sbin
  10. export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
  11. export HADOOP_COMMON_HOME=$HADOOP_INSTALL
  12. export HADOOP_HDFS_HOME=$HADOOP_INSTALL
  13. export YARN_HOME=$HADOOP_INSTALL
  14. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
  15. export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

还有一个问题就是,在启动hadoop的时候经常会出现,找不到JAVA_HOME的问题,这个问题可以通过修改hadoop环境变量来解决,直接写死变量就可以了.

  1. hadoop@hadoopmaster:/usr/local/hadoop/etc/hadoop$ ls
  2. capacity-scheduler.xml hadoop-metrics2.properties httpfs-signature.secret log4j.properties ssl-client.xml.example
  3. configuration.xsl hadoop-metrics.properties httpfs-site.xml mapred-env.cmd ssl-server.xml.example
  4. container-executor.cfg hadoop-policy.xml kms-acls.xml mapred-env.sh yarn-env.cmd
  5. core-site.xml hdfs-site.xml kms-env.sh mapred-queues.xml.template yarn-env.sh
  6. hadoop-env.cmd httpfs-env.sh kms-log4j.properties mapred-site.xml.template yarn-site.xml
  7. hadoop-env.sh httpfs-log4j.properties kms-site.xml slaves
  8. hadoop@hadoopmaster:/usr/local/hadoop/etc/hadoop$ sudo nano hadoop-env.sh
  9. $ more hadoop-env.sh
  10. export JAVA_HOME=/usr/lib/jvm/

2 配置集群环境

集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。

3 配置文件内容-slaves

文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 hadoopmaster 节点仅作为 NameNode 使用。
本教程让 hadoopmaster 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加二行内容:hadoopslave1 hadoopslave2。

  1. hadoop@hadoopmaster:/usr/local/hadoop/etc/hadoop$ more slaves
  2. hadoopslave1
  3. hadoopslave2

4 配置文件内容-core-site.xml

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://hadoopmaster:9000</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>file:/usr/local/hadoop/tmp</value>
  9. <description>Abase for other temporary directories.</description>
  10. </property>
  11. </configuration>

5 配置文件内容 hdfs-site.xml

dfs.replication 一般设为 3,但我们只有二个 Slave 节点,所以 dfs.replication 的值还是设为 2:

  1. <configuration>
  2. <property>
  3. <name>dfs.namenode.secondary.http-address</name>
  4. <value>hadoopmaster:50090</value>
  5. </property>
  6. <property>
  7. <name>dfs.replication</name>
  8. <value>2</value>
  9. </property>
  10. <property>
  11. <name>dfs.namenode.name.dir</name>
  12. <value>file:/usr/local/hadoop/tmp/dfs/name</value>
  13. </property>
  14. <property>
  15. <name>dfs.datanode.data.dir</name>
  16. <value>file:/usr/local/hadoop/tmp/dfs/data</value>
  17. </property>
  18. </configuration>

6 配置文件 - mapred-site.xml

(可能需要先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. <property>
  7. <name>mapreduce.jobhistory.address</name>
  8. <value>hadoopmaster:10020</value>
  9. </property>
  10. <property>
  11. <name>mapreduce.jobhistory.webapp.address</name>
  12. <value>hadoopmaster:19888</value>
  13. </property>
  14. </configuration>

7 配置文件 - yarn-site.xml

  1. <configuration>
  2. <property>
  3. <name>yarn.resourcemanager.hostname</name>
  4. <value>hadoopmaster</value>
  5. </property>
  6. <property>
  7. <name>yarn.nodemanager.aux-services</name>
  8. <value>mapreduce_shuffle</value>
  9. </property>
  10. </configuration>

五 hadoopslave1 2节点需要做的

首先通过sftp把hadoop配置好的hadoop打包,之后转输到Slave节点上,配置好环境变量JDK PATH SSH 基本上与Master是一样的.
配置好后,将 Master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。
在 Master 节点上执行:

  1. cd /usr/local
  2. sudo rm -r ./hadoop/tmp
  3. sudo rm -r ./hadoop/logs/*
  4. tar -cvfz ~/hadoop.master.tar.gz ./hadoop

在Slave节点上执行:

  1. sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
  2. sudo tar -xvfz ~/hadoop.master.tar.gz -C /usr/local
  3. sudo chown -R hadoop:hadoop /usr/local/hadoop

六 开始启动集群

  1. hdfs namenode -format # 首次运行需要执行初始化,之后不需要
  2. Master上执行:
  3. $start-dfs.sh
  4. $start-yarn.sh
  5. $mr-jobhistory-daemon.sh start historyserver
  6. Centos6.X需要关闭防火墙
  7. sudo service iptables stop # 关闭防火墙服务
  8. sudo chkconfig iptables off # 禁止防火墙开机自启,就不用手动关闭了
  9. Cent7
  10. systemctl stop firewalld.service # 关闭firewall
  11. systemctl disable firewalld.service # 禁止firewall开机启动

之后分别在Master与Slave上执行jps,会看到不同的结果.缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有 1 个 Datanodes:

  1. $jps
  2. $hdfs dfsadmin -report
  3. 可以访问http://192.168.1.159:50070/ 查看结果

3. Hadoop 2.7.2完全分布式 - 图1
3. Hadoop 2.7.2完全分布式 - 图2

七 执行分布式的实验-分布式存储

  1. 执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录:
  2. $ hdfs dfs -mkdir -p /user/hadoop
  3. /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中:
  4. $ hdfs dfs -mkdir input
  5. $ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input

通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中,如下图所示:
3. Hadoop 2.7.2完全分布式 - 图3

八 执行分布式的实验-MapReduce

执行MapReduce作业

  1. hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /user/hadoop/input /user/hadoop/output 'dfs[a-z.]+'
  2. 查看http://192.168.1.159:8088/cluster看结果

运行时的输出信息与伪分布式类似,会显示 Job 的进度。

可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。
同样可以通过 Web 界面查看任务进度 http://master:8088/cluster,在 Web 界面点击 “Tracking UI” 这一列的 History 连接,可以看到任务的运行信息,如下图所示:

3. Hadoop 2.7.2完全分布式 - 图4

  1. 关闭集群
  2. stop-yarn.sh
  3. stop-dfs.sh
  4. mr-jobhistory-daemon.sh stop historyserver

九 同步时间

在安装hadoop环境的过程中,时间同步是非常重要的一个服务.因为分布式系统如果时间不同步会造成系统中的许多问题.

1 在线安装

ntp在线安装的方式很简单,只需要执行以下命令即可帮你安装好ntp以及所有的依赖包

  1. sudo apt-get install ntp

2 离线安装

如果要离线安装,那么就需要下载ntp安装包和依赖包。我们可以在一个有线环境下运行上面的在线安装,然后到/var/cache/apt/archives这个目录下拷贝完整的ntp安装包和依赖包。

  1. dpkg -i libopts25_1%3a5.12-0.1ubuntu1_amd64.deb
  2. dpkg -i ntp_1%3a4.2.6.p3+dfsg-1ubuntu3.1_amd64.deb

当然还有更加简单的方法,将下载的deb包拷贝到/var/cache/apt/archives目录下,然后在执行一下命令同样可以安装。

  1. sudo apt-get install ntp

安装完毕以后我们可以查看服务是否启动,执行以下命令:

  1. hadoop@hadoopmaster:~$ sudo service --status-all
  2. [ + ] acpid
  3. [ + ] apparmor
  4. [ ? ] apport
  5. [ + ] atd
  6. [ ? ] console-setup
  7. [ + ] cron
  8. [ - ] dbus
  9. [ ? ] dns-clean
  10. [ + ] friendly-recovery
  11. [ - ] grub-common
  12. [ ? ] irqbalance
  13. [ ? ] killprocs
  14. [ ? ] kmod
  15. [ ? ] networking
  16. [ + ] ntp
  17. [ ? ] ondemand
  18. [ ? ] pppd-dns
  19. [ - ] procps
  20. [ ? ] rc.local
  21. [ + ] resolvconf
  22. [ - ] rsync
  23. [ + ] rsyslog
  24. [ ? ] screen-cleanup
  25. [ ? ] sendsigs
  26. [ - ] ssh
  27. [ - ] sudo
  28. [ + ] udev
  29. [ ? ] umountfs
  30. [ ? ] umountnfs.sh
  31. [ ? ] umountroot
  32. [ - ] unattended-upgrades
  33. [ - ] urandom

可以看到ntp服务已经启动([+]表示已经启动。)

3 配置文件 /etc/ntp.conf

建议在配置之前进行备份

  1. driftfile /var/lib/ntp/ntp.drift
  2. statistics loopstats peerstats clockstats
  3. filegen loopstats file loopstats type day enable
  4. filegen peerstats file peerstats type day enable
  5. filegen clockstats file clockstats type day enable
  6. server ntp.ubuntu.com
  7. restrict -4 default kod notrap nomodify nopeer noquery
  8. restrict -6 default kod notrap nomodify nopeer noquery
  9. restrict 192.168.1.0 mask 255.255.255.0 nomodify
  10. restrict 127.0.0.1
  11. restrict ::1

4 同步时间

  1. sudo ntpdate 192.168.1.159

十 FAQ

1 出现的问题

  1. hadoop@hadoopmaster:~$ start-dfs.sh
  2. 16/07/18 20:45:04 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  3. Starting namenodes on [hadoopmaster]
  4. hadoopmaster: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-hadoopmaster.out
  5. hadoopslave1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-hadoopslave1.out
  6. hadoopslave2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-hadoopslave2.out
  7. Starting secondary namenodes [hadoopmaster]
  8. hadoopmaster: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-hadoopmaster.out
  9. 16/07/18 20:45:20 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

解决方法

  1. 首先下载hadoop-native-64-2.4.0.tar
  2. http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.4.0.tar
  3. 如果你是hadoop2.6的可以下载下面这个:
  4. http://dl.bintray.com/sequenceiq/sequenceiq-bin/hadoop-native-64-2.6.0.tar
  5. 下载完以后,解压到hadoopnative目录下,覆盖原有文件即可。操作如下:
  6. tar -x hadoop-native-64-2.4.0.tar -C hadoop/lib/native/
  7. 再将环境变量导入到系统中.修改/etc/profile
  8. export JAVA_LIBRARY_PATH=/usr/local/hadoop/lib/native

时钟不正确的问题

  1. fatal org.apache.hadoop.hbase.regionserver.hregionserver: master rejected startup because clock is out of sync
  2. org.apache.hadoop.hbase.clockoutofsyncexception: org.apache.hadoop.hbase.clockoutofsyncexception: server suc-pc,60020,1363269953286 has been rejected; reported time is too far out of sync with master. time difference of 39375ms > max allowed of 30000ms
  3.   小问题,一看就知道错误发生在哪。在hbase中,允许小的时间偏差,但是上面39秒的时间偏差就有点大了。如果你是联网的话,可以用ntpdate 219.158.14.130进行同步。219.158.14.130是网通北京的时间服务器,如果不行你可以用别的服务器进行同步。

这里面有一段小插曲就是,我在使用的时候,由于使用了外网的时钟服务器,但是resolv.conf反复被覆盖.所以不成功.

  1. /etc/resolv.conf中设置dns之后每次重启Ubuntu Server时该文件会被覆盖,针对这种情况找了一些个解决方法
  2. 防止/etc/resolv.conf被覆盖的方法
  3. 方法一
  4. 1.需要创建一个文件/etc/resolvconf/resolv.conf.d/tail
  5. sudo vi /etc/resolvconf/resolv.conf.d/tail
  6. 2.在该文件中写入自己需要的dns服务器,格式与/etc/resolv.conf相同
  7. nameserver 8.8.8.8
  8. 3.重启下resolvconf程序
  9. sudo /etc/init.d/resolvconf restart
  10. 再去看看/etc/resolv.conf文件,可以看到自己添加的dns服务器已经加到该文件中
  11. 方法二
  12. 在/etc/network/interfaces
  13. ###interfaces中#######
  14. auto eth0
  15. iface eth0 inet static
  16. address 192.168.3.250
  17. netmask 255.255.255.0 #子网掩码
  18. gateway 192.168.3.1 #网关
  19. dns-nameservers 8.8.8.8 8.8.4.4 #设置dns服务器

zookeeper服务器未设置或者/etc/hosts设置有误(hbase)

  1. 2013-03-11 19:41:08,263 info org.apache.zookeeper.clientcnxn: opening socket connection to server localhost/127.0.0.1:2181. will not attempt to authenticate using sasl (unknown error)
  2. 2013-03-11 19:41:08,266 warn org.apache.zookeeper.clientcnxn: session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
  3. java.net.connectexception: 拒绝连接
  4. at sun.nio.ch.socketchannelimpl.checkconnect(native method)
  5. at sun.nio.ch.socketchannelimpl.finishconnect(socketchannelimpl.java:692)
  6. at org.apache.zookeeper.clientcnxnsocketnio.dotransport(clientcnxnsocketnio.java:350)
  7. at org.apache.zookeeper.clientcnxn$sendthread.run(clientcnxn.java:1068)
  8.   这个问题的出现,会伴随一个非常奇怪的现象。在master所在的pc上启动start-all时,内容提示所有的regionserver已经全部启动。但是,如果你去查看masterip60010时会发现其他的regionserver并没有启动,regionserver的数量只有一台。因为已经有一台regionserver是活着的,所以hbase还是能继续使用的,这
  9. 此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
  10. 会迷惑你。查看别的机器的日志后,你就会发现上述错误。zookeeper的定位居然定位到127.0.0.1去了,这个不科学。最后,查阅资料才发现hbase.zookeeper.quorum这个属性设置时,默认本机即为zookeeper服务器(单机使用)。这就很简单了,只需要增加这个属性就可以了。
  11. <property>
  12. <name>hbase.zookeeper.quorum</name>
  13. <value>10.82.58.213</value>
  14. </property>
  15.   同时,也发现如果/etc/hosts设置错误也会发生类似问题。/etc/hosts中,localhost和本机pc名都需要为127.0.0.1,因为本机pc名默认是127.0.1.1
  16.   参考:http://mail-archives.apache.org/mod_mbox/hbase-user/201106.mbox/%3cbanlktimcghr-1mdtdo3netzmrqxkbjy=da@mail.gmail.com%3e