一、准备
1.用户:用root也行,或者自己建立一个新的用户都可以,但是注意所有集群采用同样的用户名以及java和hadoop相同的安装目录。
2.两个文件:
jdk-7u17-linux-x64.rpm,别的版本也可以,起码1.6以上(hadoop要求)。
hadoop-1.1.2-bin.tar.gz,hadoop不推荐用rpm安装,这样各个文件相对比较集中,利于后期手动配置更多参数或者优化。
3.硬件:最好三台机器以上,独立linux系统(非虚拟机),配置当然越高越好。
4.先关了防火墙
即时生效,重启后失败:
service iptables stop(关)
service iptables start(开)
重启后永久生效:
chkconfig iptables off(关)
chkconfig iptables on(开)
也可以修改相关端口,自己看着办。
二、修改namenode和datanode的名称(namenode和所有datanode)
1.vim /etc/sysconfig/network
namenode上: HOSTNAME=namenode
datanode上: HOSTNAME=datanode1(其它datanode类似)
2.vim /etc/hosts
加入:192.168.xxx.xxx namenode
192.168.xxx.xxx datanode1(其它类似)
注意:namenode上要全部都写上,datanode上写自己的就行了。
例如:datanode2的配置
192.168.xxx.xxx namenode
192.168.xxx.xxx datanode2
3.测试:ping namenode,ping datanode1.......
三、JAVA&JDK
1.首先安装JDK
权限:chmod a+x jdk-7u17-linux-x64.rpm
安装:rpm -ivh jdk7u17-linux-x64.rpm
2.配置java环境
虽然是rpm安装,不用配置环境变量,java -version也能显示,但是为了hadoop还是不能偷懒。。。
首先看一下安装在哪了:
find / -name java 然后找到安装目录
配置系统环境变量:
vim /etc/profile
添加:
#set config java
export JAVA_HOME=/usr/java/jdk1.7.0_17
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME CLASSPATH PATH
source生效:
source /etc/profile
3.多个jdk的处理
如果我们安装eclipse以后或者因为其它原因系统中有多个jdk,hadoop最好不要用sun的jdk(都说山寨,不明原因),这样处理:
alternatives --install /usr/bin/java java /usr/java/jdk1.7.0/bin/java 60
alternatives --config java
打完就看明白了,选我们希望用的jdk号,然后enter。。。
再java -version看一下吧。
如果实在是看不下去,那就删除别的jdk
rpm -qa|grep java
rpm -e --nodeps xxxxxxxx 或者 yum -y remove xxxxxxxxxxx
4.可以写个hello world感受一下。。。
四、SSH
1.用SSH的目的就是为了实现namenode和datanode之间能够直接访问(不需要输入root密码),这也是hadoop要求的。
2.SSH无密码原理
Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥追加到所有的Slave的authorized_keys文件上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并从authorized_keys找到Master 的公钥,然后用这个公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认 解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave 上。
3.实现
a. 首先要安装openssh,yum安装server和client。
b.配置ssh
vim /etc/ssh/sshd_config
设置:(把前面的#去掉即可,no的改成yes)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
c.在namenode上
ssh-keygen -t rsa (ssh-keygen一个单独的命令)
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys (本机ssh本机)
cat ~/.ssh/id_rsa.pub | ssh root@datanode1 "cat >>~/.ssh/authorized_keys" (本机和datanode)
其他datanode一样
d.在所有datanode上
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys (本机ssh本机)
cat ~/.ssh/id_rsa.pub | ssh root@namenode "cat >>~/.ssh/authorized_keys" (和namenode)
cat ~/.ssh/id_rsa.pub | ssh root@datanode2 "cat >>~/.ssh/authorized_keys" (和其他datanode)
e.重启ssh服务
service sshd restart
f.验证
ssh namnode
ssh datanode1。。。。。
五、HADOOP
1.解压缩(看准目录)
tar -zxvf hadoop-1.1.2-bin.tar.gz
2.配置系统环境
vim /etc/profile
#set hadoop install
export HADOOP_INSTALL=/usr/hadoop-1.1.2
export PATH=$PATH:$HADOOP_INSTALL/bin
#set hadoop
export HADOOP_HOME=/usr/hadoop-1.1.2
export PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_LOG_DIR=${HADOOP_HOME}/logs
source /etc/profile生效
3.配置hadoop(conf目录下)
a.主从配置
vim masters
namenode 或者直接IP地址 192.168.XXX.XXX
vim slaves
datanode1
datanode2。。。
所有namenode和datanode都要配置(一样的)
b.配置hadoop-env.sh
vim hadoop-env.sh
# The java implementation to use. Required.
export JAVA_HOME=/usr/java/jdk1.7.0_17(去掉#改成自己的目录)
这里最好加一句:
export HADOOP_HOME_WARN_SUPPRESS=TRUE
是为了防止出现:“Warning:$HADOOP_HOME is deprecated 关闭”的警告信息。
有这个也没事,就是看着蛋疼!
c. 配置core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop-1.1.2/tmp/</value>(*注意目录)
</property>
</configuration>
d.配置hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>(*表示数据备份个数)
</property>
</configuration>
e.配置mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
</configuration>
f.datanode处理
把这三个xml文件拷贝到datanode上
例如:scp /usr/hadoop-1.1.2/conf/core-site.xml root@datanode1:/usr/hadoop-1.1.2/conf/
这里会发现,已经不需要输入密码了,这就是无密码ssh的作用。
别忘了datanode的 hadoop-env.sh
g.可以选择重启一下,我也不知道为什么,就是感觉~
4.初始化hadoop(所有namenode和datanode)
namenode: ./bin/hadoop namenode -format
datanode: ./bin/hadoop datanode -format
(*注意看出来的东西,什么都无所谓,但是不能有ERROR!)
如果有ERROR,大部分是因为JDK的目录没有设置好。
5.启动hadoop
./bin/start-all.sh
关闭:./bin/stop-all.sh
(*如果是rpm安装的hadoop,这里会有权限问题,运行chmod -R 777 /usr/sbin/ )
(*如果这里有个warning,不用管)
6.查看结果
a.jps
如果这个命令用不了,说明是jdk配置错误。
b.hadoop dfsadmin -report
c.网页形式:
jobtracker: http://192.168.xxx.xxx:50030/jobtracker.jsp
dfs:http://192.168.xxx.xxx:50070/
六、测试
1.一个简单的sort样例(自带的)
hadoop jar $HADOOP_INSTALL/hadoop-examples-1.1.2.jar randomwriter random-data
hadoop jar $HADOOP_INSTALL/hadoop-examples-1.1.2.jar random-data sorted-data
(*期间可以在jobtracker上看过程)
结果:
hadoop jar $HADOOP_INSTALL/hadoop-test-1.1.2.jar testmapredsort -sortInput random-data -sortOutput sorted-data
七、自己编译JAR包
1.eclipse下project的方式,在网页中是看不见运行状态的。
2.自己写:(以WordCount为例)
a.首先在workspaces/WordCount/src,就是eclipse的目录,找到WordCount.java
mkdir wordcount_classes (javac后的.class文件在这里头)
b.编译
javac -classpath /usr/hadoop-1.0.4/hadoop-core-1.0.4.jar:/usr/hadoop-1.0.4/lib/commons-cli-1.2.jar -d wordcount_classes WordCount.java
hadoop-core-1.0.4.jar这个文件各个版本可能不太一样,去hadoop目录瞅一眼。
c.打包
jar -cvf wordcount.jar -C wordcount_classes/ .(.前面有个空格)
d.执行
hadoop jar wordcount.jar WordCount /tmp/wordcount/word.txt /tmp/wordcount/output
WordCount这里,如果在一个packet内,需要把完整的packet名加入,例如:org.myorg.WordCount
后面直接跟hdfs路径的input和output就行
3.在http://192.168.xxx.xxx:50030/jobtracker.jsp中就可以看见job的记录了。
转载于:https://my.oschina.net/rongganglee/blog/377286