1、 安装HADOOP集群服务器 1. 规划 功能 HOSTNAME IP 说明 Master HDM01 192.168.1.1 Namenode 兼datanode Slave HDS02 192.168.1.2 Datanode Slave HDS03 192.168.1.3 Datanode Client HDC04 192.168.1.4 HADOOP客户端(HDFS/HIVE) 2. 环境 2.1. 系统环境 安装 centOS6.2 => 软件工作站(software Development Workstation)
2、 3. Hadoop安装 3.1. 安装和配置SSH 、RSYNC( Root用户) 安装 SSH和rsync 一般系统自带了; 3.2. 创建Hadoop运行用户( Root用户) 一般我们不会经常使用root用户运行hadoop,所以要创建一个平常运行和管理Hadoop的用户; Ø 创建hadoop用户和用户组 useradd hadoop PS:master和slave节点机都要创建相同的用户和用户组,即在所有集群服务器上都要建hadoop用户和用户组。 3.3. 关闭防火墙( Root用户) 在启动前关闭集群中所有机器的防火墙,不然会出现da
3、tanode开后又自动关闭。所以对集群所有服务器关闭防火墙:chkconfig iptables off 查看防火墙状态:service iptables status 永久关闭防火墙:chkconfig iptables off 查看防火墙状态:chkconfig --list iptables 3.4. 配置机器名和网络( Root用户) n 配置HOSTNAME vi /etc/sysconfig/network,修改:HOSTNAME=hmaster 其他节点依次改为slave1,slave2…….不过必须
4、和上面一致 验证; 输入命令 hostname n 配置网络IP cd /etc/sysconfig/network-scripts vi ifcfg-eth0(因为硬件不同,其中的“eth0”可能是其他名称) n 配置IP和HOSTNAME映射关系 vi /etc/hosts [root@NOAS ~]# more /etc/hosts #127.0.0.1 localhost localhost.localdomain localhost4 #localhos
5、t4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.1 HDM01 192.168.1.2 HDS02 192.168.1.3 HDS03 192.168.1.4 HDC04 3.5. 配置非root用户免验证登录SSH( hadoop用户) 提示:Linux配置ssh是通过欺骗登录用户名的。所以上面创建用户的时候,我们都把3个节点的username都设置成hadoop,主要是用户名必须一致 在hadoop
6、用户的home目录,即 cd /home/hadoop 下执行命令 用hadoop用户登录(第 一/二/三步分别在每一个节点上都要执行) 第一步:ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa 意思是读取 id_dsa文件默认 全部是yes安装 和root用户一样,会发现多处2个文件,一个是公开密匙,一个是访问用户名字信息的 第二步:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 是把暴露出来的公共密匙按顺序导入authorized_keys中保存 第三步:chmod 700 ~/.ss
7、h chmod 600 ~/.ssh/authorized_keys ssh机制很严谨,对文件的权限要求非常严格 我们需要把.ssh文件夹的权限改为700 ,默认是777 authorized_keys的权限这里是对的,600 第四步:在主节点上执行下列命令 ssh HDS02 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys ssh HDS03 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys scp authorized_keys hadoop@HDS02:/home/hadoo
8、p/.ssh/ scp authorized_keys hadoop@HDS03:/home/hadoop/.ssh/ 最终authorized_keys文件要有各个集群服务器的信息 第五步:验证 第一次会要求输入密码,完成后测试,每台机都要求能联通: ssh HDM01 ssh HDS02 ssh HDS03 不输入密码 就表示成功了; 3.6. 安装JDK( hadoop用户) 检查是否已安装JDK: rpm -qa|grep jdk 检查JAVA安装目录: whick java 检查是否配置JAVA_HOME: e
9、nv|grep JAVA_HOME which java 和 JAVA_HOME 路径不一致,是做了LINK映射 [root@NOAS ~]# su - hadoop [hadoop@NOAS ~]$ rpm -qa|grep jdk java-1.6.0-openjdk-javadoc-1.6.0.0-1.41.1.10.4.el6.x86_64 java-1.6.0-openjdk-devel-1.6.0.0-1.41.1.10.4.el6.x86_64 java-1.6.0-openjdk-1.6.0.0-1.41.1.10.4.el6.x86_64 [
10、hadoop@NOAS ~]$ which java /usr/bin/java [hadoop@NOAS ~]$ ls -l /usr/bin/java lrwxrwxrwx. 1 root root 22 Feb 26 22:26 /usr/bin/java -> /etc/alternatives/java [hadoop@NOAS ~]$ ls -l /etc/alternatives/java lrwxrwxrwx. 1 root root 46 Feb 26 22:26 /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-op
11、enjdk.x86_64/bin/java [hadoop@NOAS ~]$ env|grep JAVA_HOME JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64 在当前用户配置JAVA_HOME,在.bash_profile文件增加蓝色部分,最后 source /home/hadoop/.bash_profile ,使生效 hadoop@NOAS ~]$ cd /home/hadoop/ [hadoop@NOAS ~]$ more .bash_profile # .bash_profile # Ge
12、t the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64 PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib/dt.jar:$JAVA_H
13、OME/lib/tools.jar export JAVA_HOME export PATH export CLASSPATH [hadoop@NOAS ~]$ 3.7. 安装Hadoop( root用户) 3.7.1. 安装rpm包: 用rpm包安装,目录都是默认的比较规范 用root用户: rpm -ivh /opt/colud/hadoop-1.2.1-1.x86_64.rpm 3.7.2. 配置Hadoop配置文件 (每台机器服务器都要配置,且都是一样的,配置完一台其他的只需要拷贝,每
14、台机上的core-site.xml和mapred-site.xml都是配master服务器的hostname,因为都是配置hadoop的入口)
core-site.xml:整个hadoop入口的配置
vi /etc/hadoop/core-site.xml,配置如下内容:
15、fault.name
16、
17、menode也兼datanode,一般情况namenode要求独立机器,namemode不兼datanode) vi /etc/hadoop/masters,配置如下内容: HDM01 vi /etc/hadoop/slaves,配置如下内容: HDM01 HDS02 HDS03 3.7.4. 配置非ROOT用户权限 n (包含用非root用户启动Hadoop所需的额外项) 将/usr/sbin/下的以下脚本文件的owner设为testusr,且赋给owner全权rwx : chown hadoop:hadoop /usr/sbin/hadoop-c
18、reate-user.sh chown hadoop:hadoop /usr/sbin/hadoop-daemon.sh chown hadoop:hadoop /usr/sbin/hadoop-daemons.sh chown hadoop:hadoop /usr/sbin/hadoop-setup-applications.sh chown hadoop:hadoop /usr/sbin/hadoop-setup-conf.sh chown hadoop:hadoop /usr/sbin/hadoop-setup-hdfs.sh chown hadoop:hadoop /usr
19、/sbin/hadoop-setup-single-node.sh chown hadoop:hadoop /usr/sbin/hadoop-validate-setup.sh chown hadoop:hadoop /usr/sbin/rcc chown hadoop:hadoop /usr/sbin/slaves.sh chown hadoop:hadoop /usr/sbin/start-all.sh chown hadoop:hadoop /usr/sbin/start-balancer.sh chown hadoop:hadoop /usr/sbin/start-dfs.
20、sh chown hadoop:hadoop /usr/sbin/start-jobhistoryserver.sh chown hadoop:hadoop /usr/sbin/start-mapred.sh chown hadoop:hadoop /usr/sbin/stop-all.sh chown hadoop:hadoop /usr/sbin/stop-balancer.sh chown hadoop:hadoop /usr/sbin/stop-dfs.sh chown hadoop:hadoop /usr/sbin/stop-jobhistoryserver.sh ch
21、own hadoop:hadoop /usr/sbin/stop-mapred.sh chown hadoop:hadoop /usr/sbin/update-hadoop-env.sh chmod u+rwx /usr/sbin/hadoop-create-user.sh chmod u+rwx /usr/sbin/hadoop-daemon.sh chmod u+rwx /usr/sbin/hadoop-daemons.sh chmod u+rwx /usr/sbin/hadoop-setup-applications.sh chmod u+rwx /usr/sbin/ha
22、doop-setup-conf.sh chmod u+rwx /usr/sbin/hadoop-setup-hdfs.sh chmod u+rwx /usr/sbin/hadoop-setup-single-node.sh chmod u+rwx /usr/sbin/hadoop-validate-setup.sh chmod u+rwx /usr/sbin/rcc chmod u+rwx /usr/sbin/slaves.sh chmod u+rwx /usr/sbin/start-all.sh chmod u+rwx /usr/sbin/start-balancer.sh
23、chmod u+rwx /usr/sbin/start-dfs.sh chmod u+rwx /usr/sbin/start-jobhistoryserver.sh chmod u+rwx /usr/sbin/start-mapred.sh chmod u+rwx /usr/sbin/stop-all.sh chmod u+rwx /usr/sbin/stop-balancer.sh chmod u+rwx /usr/sbin/stop-dfs.sh chmod u+rwx /usr/sbin/stop-jobhistoryserver.sh chmod u+rwx /usr/s
24、bin/stop-mapred.sh chmod u+rwx /usr/sbin/update-hadoop-env.sh n 将/usr/bin/下的hadoop设为所有人(不是其他人)可读可执行。即chmod 555(不是chmod 005) chmod 555 /usr/bin/hadoop n /var/log/hadoop/及其下(循环)的owner设为testusr,且赋给owner全权rwx /var/run/hadoop/及其下(循环)的owner设为testusr,且赋给owner全权rwx /home/hadoop/及其下(循环)的owne
25、r设为testusr,且owner权限设为“rwxr-xr-x”,设为更大权限不行,主要是因为/home/hadoop/tmp/dfs/data的权限需要为“rwxr-xr-x” chown -R hadoop:hadoop /var/log/hadoop/ chown -R hadoop:hadoop /var/run/hadoop/ chown -R hadoop:hadoop /home/hadoop/ chmod -R u+rwx /var/log/hadoop/ chmod -R u+rwx /var/run/hadoop/ chmod -R u+rwx /hom
26、e/hadoop/ 3.7.5. 配置HADOOP的JAVA环境 配置Hadoop的java环境与env的JAVA_HOME保持一致,文件/etc/hadoop/hadoop-env.sh # The java implementation to use. #export JAVA_HOME=/usr/java/default export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64 export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"} 3
27、8. 格式化HDFS( hadoop用户) hadoop namenode -format(用hadoop用户) 重新format时,系统提示如下: Re-format filesystem in /home/hadoop/tmp/dfs/name ? (Y or N) 必须输入大写Y,输入小写y不会报输入错误,但format出错。 chown -R hadoop:hadoop /home/hadoop/ chmod -R 755 /home/hadoop/ 3.9. 启动Hadoop( hadoop用户) Hadoop用
28、户登录 命令: start-all.sh (记得关闭所有的防火墙) 3.9.1. 验证hadoop (1)验证方法一:用"jps"命令 在Master上用 java自带的小工具jps查看5个进程都在。 在Slave1上用jps查看进程。 如果在查看Slave机器中发现"DataNode"和"TaskTracker"没有起来时,先查看一下日志的,如果是"namespaceID"不一致问题,采用"常见问题FAQ6.2"进行解决,如果是"No route to host"问题,采用"常见问题FAQ6.3"进行解决。
29、 (2)验证方式二:用"hadoop dfsadmin -report" 用这个命令可以查看Hadoop集群的状态。 Master服务器的状态: Slave服务器的状态 4.4 网页查看集群 1)访问"http:192.168.1.1:50030" 2)访问"http: 192.168.1.1:50070" 3.10. HADOOP语法 3.10.1. 启动/关闭 Ø Start-all.sh / stop-all.sh Ø 3.10.2. 进程 Ø Jps Master节点:nam
30、enode/tasktracker (如果Master不兼做Slave, 不会出现datanode/Tasktracker Slave节点:datanode/Tasktracker 说明: JobTracker 对应于 NameNode TaskTracker 对应于 DataNode DataNode 和NameNode 是针对数据存放来而言的 JobTracker和TaskTracker是对于MapReduce执行而言的 mapreduce中几个主要概念,mapreduce整体上可以分为这么几条执行线索: jobclient,JobTracker与
31、TaskTracker。 1、JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,并把路径提交到Jobtracker,然后由JobTracker创建每个Task(即MapTask和ReduceTask)并将它们分发到各个TaskTracker服务中去执行 2、JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。 3、TaskTrack
32、er是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。TaskTracker都需要运行在HDFS的DataNode上 3.10.3. 文件系统HDFS n 查看文件系统根目录: Hadoop fs –ls / 文件系统的目录和文件是不能再本地系统查看到的;相当于两个不同的系统; 4. 常见错误 4.1. 错误 :(hadoop)could only be replicated to 0 nodes, instead of 1 现象:namenode端的nameno
33、delog一直报could only be replicated to 0 nodes, instead of 1 错误,表示没有一个可用的节点 。datanode端一直报错:Server at /10.0.0.21:54310 not available yet, Zzzzz...2011-03-03 11:33:10,047 INFO org.apache.hadoop.ipc.Client: Retrying connect to server: /10.0.0.21:54310,一直尝试连接master但连接不上 。 改正:在namenode中配置master 和 jobtrack
34、er的ip时使用的是localhost ,将这两个改成namenode以及jobtracker本机的实际ip后,问题得以解决 。 具体的原因我也不太明白 。 当然这个错误还有其他的几个原因(摘自网上): dfs的空间不足 。 namenode运行在safemodel下。 namenode所在机器的防火墙开着是的datanode无法访问master 。 这几个问题详见: Ø HADOOP 重新格式化文件后,要删除 cd /home/hadop/tmp/data rm –rf data Ø Name node is in safe mode. 在
35、分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结 束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入 安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。 现在就清楚了,那现在要解决这个问题,我想让Hadoop不处在safe mode 模式下,能不能不用等,直接解决呢? 答案是可以的,只要在Hadoop的目录下输入: bin/hado
36、op dfsadmin -safemode leave 关闭安全模式就可以了。。。 4.2. 用其他用户调用hadoop或HIVE [etl@HDC04 ~]$ hive Exception in thread "main" java.io.IOException: Permission denied at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.checkAndCreate(File.java:1716) at
37、 java.io.File.createTempFile(File.java:1804) at org.apache.hadoop.util.RunJar.main(RunJar.java:119) 该问题是因为: org.apache.hadoop.util.RunJar.main 里面要创建临时文件: hadoop.tmp.dir这个目录存放的是解压后的jar文件等临时文件。 那么hadoop.tmp.dir这个变量是在哪里定义的呢?于是查看本机提交job时用到的hadoop配置文件core-site.xml:发现hadoop.tmp.dir是 /hom
38、e/hadoop/hadoop-data 这个目录,而当前的admin用户确实是没有权限访问这个目录的。于是改下配置文件就可以了。 Chmod –R 777 /home/hadoop/hadoop-data 4.3. 用其他用户调用hadoop或HIVE 启动HIVE出现链接不上mysql com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes 解决方案:到mysql中的hive数据库里执行 alter database hivedb character set latin1;改变hive元数据库的字符集,问题就可以解决!
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818