安装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  => 软件工作站(softwareDevelopment Workstation)

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用户)

在启动前关闭集群中所有机器的防火墙,不然会出现datanode开后又自动关闭。所以对集群所有服务器关闭防火墙:chkconfig iptables off

 

    查看防火墙状态:service iptables status

    永久关闭防火墙:chkconfig iptables off

    查看防火墙状态:chkconfig --list iptables

   

3.4.           配置机器名和网络( Root用户)

配置HOSTNAME

      vi /etc/sysconfig/network,修改:HOSTNAME=hmaster

      其他节点依次改为slave1,slave2…….不过必须和上面一致

             

     验证; 输入命令hostname

 

  配置网络IP

      cd /etc/sysconfig/network-scripts

      vi ifcfg-eth0(因为硬件不同,其中的“eth0”可能是其他名称)

     

配置IP和HOSTNAME映射关系

vi /etc/hosts  

        [root@NOAS ~]# more /etc/hosts

#127.0.0.1   localhostlocalhost.localdomain localhost4 #localhost4.localdomain4

::1         localhostlocalhost.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用户的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 ~/.ssh

            chmod 600 ~/.ssh/authorized_keys

ssh机制很严谨,对文件的权限要求非常严格

我们需要把.ssh文件夹的权限改为700 ,默认是777

authorized_keys的权限这里是对的,600

第四步:在主节点上执行下列命令

ssh HDS02cat  ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

ssh HDS03cat  ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

scp authorized_keyshadoop@HDS02:/home/hadoop/.ssh/

scpauthorized_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:  env|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

[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-openjdk.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

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

       . ~/.bashrc

fi

 

# User specific environment and startupprograms

 

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_HOME/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配置文件

(每台机器服务器都要配置,且都是一样的,配置完一台其他的只需要拷贝,每台机上的core-site.xml和mapred-site.xml都是配master服务器的hostname,因为都是配置hadoop的入口)

        core-site.xml:整个hadoop入口的配置

        

vi/etc/hadoop/core-site.xml,配置如下内容:

 <property>

 <name>hadoop.tmp.dir</name>   

 <value>/home/hadoop/tmp</value>      

 </property>

 <property>      

 <name>fs.default.name</name>  

 <value>hdfs://HDM01:9000</value>    

 </property>

 

  vi /etc/hadoop/hdfs-site.xml,配置如下内容:

 <property>

 <name>dfs.replication</name>

 <value>2</value>

 </property>

 

  vi/etc/hadoop/mapred-site.xml,配置如下内容:

 <property>

 <name>mapred.job.tracker</name>     

 <value>HDM01:9001</value>       

 </property>

 

 

 

配置说明:

core-site.xml

Ø hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。

修改该参数后要格式NAMENODE:hadoop namenode -format

 

 

 

 

 

3.7.3.       配置Hadoop集群配置文件

(只需要配置namemode节点机,这里的HDM01即做namenode也兼datanode,一般情况namenode要求独立机器,namemode不兼datanode)

 vi /etc/hadoop/masters,配置如下内容:

  HDM01

 

 vi /etc/hadoop/slaves,配置如下内容:

HDM01

HDS02

HDS03

 

3.7.4.       配置非ROOT用户权限

(包含用非root用户启动Hadoop所需的额外项)  将/usr/sbin/下的以下脚本文件的owner设为testusr,且赋给owner全权rwx :

chownhadoop:hadoop /usr/sbin/hadoop-create-user.sh

chown hadoop:hadoop/usr/sbin/hadoop-daemon.sh

chownhadoop:hadoop /usr/sbin/hadoop-daemons.sh

chownhadoop:hadoop /usr/sbin/hadoop-setup-applications.sh

chownhadoop:hadoop /usr/sbin/hadoop-setup-conf.sh

chownhadoop:hadoop /usr/sbin/hadoop-setup-hdfs.sh

chown hadoop:hadoop/usr/sbin/hadoop-setup-single-node.sh

chownhadoop:hadoop /usr/sbin/hadoop-validate-setup.sh

chownhadoop:hadoop /usr/sbin/rcc

chownhadoop:hadoop /usr/sbin/slaves.sh

chownhadoop:hadoop /usr/sbin/start-all.sh

chownhadoop:hadoop /usr/sbin/start-balancer.sh

chownhadoop:hadoop /usr/sbin/start-dfs.sh

chownhadoop:hadoop /usr/sbin/start-jobhistoryserver.sh

chownhadoop:hadoop /usr/sbin/start-mapred.sh

chownhadoop:hadoop /usr/sbin/stop-all.sh

chownhadoop:hadoop /usr/sbin/stop-balancer.sh

chown hadoop:hadoop/usr/sbin/stop-dfs.sh

chownhadoop:hadoop /usr/sbin/stop-jobhistoryserver.sh

chownhadoop:hadoop /usr/sbin/stop-mapred.sh

chownhadoop:hadoop /usr/sbin/update-hadoop-env.sh

 

chmodu+rwx /usr/sbin/hadoop-create-user.sh

chmodu+rwx /usr/sbin/hadoop-daemon.sh

chmodu+rwx /usr/sbin/hadoop-daemons.sh

chmodu+rwx /usr/sbin/hadoop-setup-applications.sh

chmodu+rwx /usr/sbin/hadoop-setup-conf.sh

chmodu+rwx /usr/sbin/hadoop-setup-hdfs.sh

chmodu+rwx /usr/sbin/hadoop-setup-single-node.sh

chmodu+rwx /usr/sbin/hadoop-validate-setup.sh

chmodu+rwx /usr/sbin/rcc

chmodu+rwx /usr/sbin/slaves.sh

chmodu+rwx /usr/sbin/start-all.sh

chmodu+rwx /usr/sbin/start-balancer.sh

chmodu+rwx /usr/sbin/start-dfs.sh

chmodu+rwx /usr/sbin/start-jobhistoryserver.sh

chmod u+rwx/usr/sbin/start-mapred.sh

chmodu+rwx /usr/sbin/stop-all.sh

chmodu+rwx /usr/sbin/stop-balancer.sh

chmodu+rwx /usr/sbin/stop-dfs.sh

chmodu+rwx /usr/sbin/stop-jobhistoryserver.sh

chmodu+rwx /usr/sbin/stop-mapred.sh

chmodu+rwx /usr/sbin/update-hadoop-env.sh

 

 

  将/usr/bin/下的hadoop设为所有人(不是其他人)可读可执行。即chmod 555(不是chmod 005)

chmod555 /usr/bin/hadoop

 

  /var/log/hadoop/及其下(循环)的owner设为testusr,且赋给owner全权rwx

 /var/run/hadoop/及其下(循环)的owner设为testusr,且赋给owner全权rwx

/home/hadoop/及其下(循环)的owner设为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 /home/hadoop/

 

 

3.7.5.       配置HADOOP的JAVA环境

配置Hadoop的java环境与env的JAVA_HOME保持一致,文件/etc/hadoop/hadoop-env.sh

    # The java implementation to use.

#exportJAVA_HOME=/usr/java/default

exportJAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64

export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}

 

 

3.8.       格式化HDFS(  hadoop用户)

  hadoop namenode-format(用hadoop用户)

  重新format时,系统提示如下:

  Re-formatfilesystem 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用户登录      

命令: start-all.sh (记得关闭所有的防火墙)

 

 

3.9.1.       验证hadoop

  (1)验证方法一:用"jps"命令

  在Master上用 java自带的小工具jps查看5个进程都在。

         

 

Slave1上用jps查看进程。 

 

  如果在查看Slave机器中发现"DataNode""TaskTracker"没有起来时,先查看一下日志的,如果是"namespaceID"不一致问题,采用"常见问题FAQ6.2"进行解决,如果是"No routeto host"问题,采用"常见问题FAQ6.3"进行解决。

 

  (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节点:namenode/tasktracker

(如果Master不兼做Slave, 不会出现datanode/Tasktracker

 

Slave节点:datanode/Tasktracker

 

说明:

JobTracker 对应于 NameNode

TaskTracker对应于DataNode

DataNodeNameNode是针对数据存放来而言的

JobTrackerTaskTracker是对于MapReduce执行而言的

 

mapreduce中几个主要概念,mapreduce整体上可以分为这么几条执行线索:

jobclientJobTrackerTaskTracker

1JobClient会在用户端通过JobClient类将应用已经配置参数打包成jar文件存储到hdfs,并把路径提交到Jobtracker,然后由JobTracker创建每个Task(即MapTaskReduceTask)并将它们分发到各个TaskTracker服务中去执行

2JobTracker是一个master服务,软件启动之后JobTracker接收Job,负责调度Job的每一个子任务task运行于TaskTracker上,并监控它们,如果发现有失败的task就重新运行它。一般情况应该把JobTracker部署在单独的机器上。

3TaskTracker是运行在多个节点上的slaver服务。TaskTracker主动与JobTracker通信,接收作业,并负责直接执行每一个任务。TaskTracker都需要运行在HDFSDataNode

 

3.10.3.    文件系统HDFS

查看文件系统根目录:

Hadoop fs –ls /

        文件系统的目录和文件是不能再本地系统查看到的;相当于两个不同的系统;

 

 

4.        常见错误

 


 

4.1.       错误:(hadoop)could only be replicated to 0 nodes, instead of 1

现象:namenode端的namenodelog一直报could only be replicated to 0 nodes,instead of 1  错误,表示没有一个可用的节点datanode端一直报错:Server at /10.0.0.21:54310 not availableyet, 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 jobtrackerip时使用的是localhost ,将这两个改成namenode以及jobtracker本机的实际ip后,问题得以解决具体的原因我也不太明白

当然这个错误还有其他的几个原因(摘自网上):

dfs的空间不足

namenode运行在safemodel下。

namenode所在机器的防火墙开着是的datanode无法访问master

这几个问题详见:http://hi.baidu.com/itdreams2009/blog/item/62a5ef18fbbe854e42a9ad13.html

 

        

 

Ø  HADOOP 重新格式化文件后,要删除 cd /home/hadop/tmp/data  rm –rf data

 

 

Ø  Name node is in safe mode.  

    在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。 

现在就清楚了,那现在要解决这个问题,我想让Hadoop不处在safe mode 模式下,能不能不用等,直接解决呢? 
答案是可以的,只要在Hadoop的目录下输入: 
bin/hadoop 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 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是 /home/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 setlatin1;改变hive元数据库的字符集,问题就可以解决!

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值