第一步. 创建hadoop用户
创建hadoop用户名与用户组
运行命令su - root,注意,不是命令su root,后者不能携带root用户的参数信息,是不能执行创建用户组和用户命令的。
创建组命令、创建用户命令、设置用户密码:
-
$ groupadd hadoop
-
$ useradd -g hadoop hadoop
-
$ passwd hadoop
注意不能在
/home目录下创建hadoop目录,否则创建hadoop用户会失败。创建好用户以后最好是重新启动系统,以hadoop用户登录系统。这样在之后的操作中就不需要su到hadoop用户下,而且也不会纠缠于文件的owner问题。
第二步. 给hadoop用户添加权限
-
$ chmod u+w /etc/sudoers
-
$ vi /etc/sudoers
内容如下:
-
## Allow root to run any commands anywhere
-
root ALL=(ALL) ALL
-
hadoop ALL=(ALL) ALL
第三步
. 更改主机名
-
127.0.0.1 CentOS localhost
-
127.0.1.1 localhost localhost
第四步. 配置SSH服务及无密码登陆
1.生成ssh密钥
如果是其他用户登录的则切换到hadoop用户下,执行命令su - hadoop,
在/home/hadoop目录下执行命令:
-
$ ssh-keygen -t rsa (一路回车,选择默认的保存路径)
密钥生成成功之后,进入.ssh目录,执行命令:
-
$ cd .ssh
-
$ cp id_rsa.pub authorized_keys
这个时候运行ssh localhost,让系统记住用户,之后ssh localhost就不需要再输入密码了。
注意:如果出现一下警告,则进入.ssh目录,删除known_hosts文件,再次ssh localhost就可以了。
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is 69:fb:9e:7f:dd:15:86:d1:95:d3:e9:b5:cf:88:98:e9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
2.交换公钥
将namenode上的公钥拷贝到datanode,在hadoop用户的用户目录下(/home/hadoop)下执行命令:ssh-copy-id -i $HOME/.ssh/id_rsa.pub hadoop@slave。同理,也可以将datanode上的公钥拷贝到namenode,但这不是必须的。两台机器在hadoop用户下互相ssh就不需要密码了。
第五步. 安装JDK
在/usr/local/目录下新建java目录,将JDK解压到该目录下,
配置JDK的环境变量 /etc/profile下的配置
配置内容如下:
-
# set java environment
-
export JAVA_HOME=/usr/local/java/jdk1.7.0_71
-
export JRE_HOME=/usr/local/java/jdk1.7.0_71/jre
-
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
-
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
这样我们就设置好了环境,然后重启才能生效,这里用命令source /etc/profile 就可以立即生效了:
第六步. 安装配置hadoop环境
完成拷贝并解压hadoop安装包在/usr/local目录下后,
1. 配置Hadoop的环境变量 /etc/profile下的配置
配置内容如下:
-
# set hadoop environment
-
export HADOOP_HOME=/usr/local/hadoop
-
export PATH=$PATH:$HADOOP_HOME/bin
-
export PATH=$PATH:$HADOOP_HOME/sbin
-
export HADOOP_MAPARED_HOME=${HADOOP_HOME}
-
export HADOOP_COMMON_HOME=${HADOOP_HOME}
-
export HADOOP_HDFS_HOME=${HADOOP_HOME}
-
export YARN_HOME=${HADOOP_HOME}
-
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
同样用命令source /etc/profile 就可以立即生效了
2.修改hadoop的hadoop-env.sh配置文件,设置jdk所在的路径
进入hadoop安装目录下,打开hadoop-env.sh配置文件
-
$ sudo vi etc/hadoop/hadoop-env.sh
配置内容如下:
-
# The java implementation to use.
-
export JAVA_HOME=/usr/local/java/jdk1.7.0_71
或者修改hadoop下的mapred-env.sh配置文件,设置jdk所在的路径
export JAVA_HOME=/usr/local/java/jdk1.7.0_71
3.修改hadoop安装目录下的etc/hadoop/目录下的core-site.xml、yarn-site.xml、mapred-site.xml和hdfs-site.xml配置文件
-
$ sudo vi etc/hadoop/core-site.xml
------------------------ core-site.xml配置文件内容:
-
<configuration>
-
<property>
-
<name>fs.default.name</name>
-
<value>hdfs://localhost:9000</value>
-
<final>true</final>
-
</property>
-
<property>
-
<name>hadoop.tmp.dir</name>
-
<value>/home/hadoop/hadoop_tmp</value>
-
</property>
-
</configuration>
-
$ sudo vi etc/hadoop/hdfs-site.xml
------------------------ hdfs-site.xml配置文件内容:
-
<configuration>
-
<property>
-
<name>dfs.namenode.name.dir</name>
-
<value>/home/hadoop/dfs/name</value>
-
<final>true</final>
-
</property>
-
<property>
-
<name>dfs.datanode.data.dir</name>
-
<value>/home/hadoop/dfs/data</value>
-
<description>Determines where on the local
-
filesystem an DFS data node should store its blocks.
-
If this is a comma-delimited list of directories,
-
then data will be stored in all named
-
directories, typically on different devices.
-
Directories that do not exist are ignored.
-
</description>
-
<final>true</final>
-
</property>
-
<property>
-
<name>dfs.replication</name>
-
<value>1</value>
-
</property>
-
<property>
-
<name>dfs.permissions</name>
-
<value>false</value>
-
</property>
-
</configuration>
没有mapred-site.xml配置文件,自己创建
-
$ sudo vi etc/hadoop/mapred-site.xml.template
------------------------ mapred-site.xml配置文件内容:
-
<configuration>
-
<property>
-
<name>mapreduce.framework.name</name>
-
<value>yarn</value>
-
</property>
-
<property>
-
<name>mapred.system.dir</name>
-
<value>/home/hadoop/mapred/system/</value>
-
<final>true</final>
-
</property>
-
<property>
-
<name>mapred.local.dir</name>
-
<value>/home/hadoop/mapred/local</value>
-
<final>true</final>
-
</property>
-
</configuration>
-
$ sudo vi etc/hadoop/yarn-site.xml
------------------------ yarn-site.xml配置文件内容:
-
<configuration>
-
<property>
-
<name>yarn.nodemanager.aux-services</name>
-
<value>mapreduce_shuffle</value>
-
</property>
-
<property>
-
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
-
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
-
</property>
-
</configuration>
4.启动hadoop
初次启动hadoop之前,先进行格式化:
-
$ bin/hdfs namenode -format
注意:格式化命令与旧版本的命令(bin/hadoop namenode -format)不一样
伪分布式启动:
完全分布式启动hadoop:
启动namenode
-
$ sbin/hadoop-daemon.sh start namenode
-
$ sbin/hadoop-daemon.sh start datanode
运行测试:
如果没有出现DataNode或者NameNode,证明启动没有成功,可以查看hadoop安装目录下的logs下的日志记录。
可以使用sbin/hadoop-daemon.sh stop datanode(或namenode)来关闭。
启动Manage管理:
-
$ sbin/yarn-daemon.sh start resourcemanager
-
$ sbin/yarn-daemon.sh start nodemanager
运行测试:
-
$ jps
-
23659 ResourceManager
-
23533 SecondaryNameNode
-
23395 DataNode
-
27851 Jps
-
23284 NameNode
-
23758 NodeManager
打开web网页,输入,访问50070端口可以查看namenode信息;
打开web网页,输入,访问8088端口可以查看job信息。
5.wordcount例子测试
(1)在本地创建两个文件file1.txt和file2.txt并输入内容
-
$ echo "hello world hello hadoop hello map hello reduce" >> file1.txt
-
$ echo "hello Leon hello olhho hello kitty" >> file2.txt
(2)在dfs上创建一个目录/user/hadoop/input
-
$ bin/hdfs dfs -mkdir /user
-
$ bin/hdfs dfs -mkdir /user/hadoop
-
$ bin/hdfs dfs -mkdir /user/hadoop/input
(3)上传本地文件到input中
-
$ bin/hdfs dfs -put file1.txt /user/hadoop/input
-
$ bin/hdfs dfs -put file2.txt /user/hadoop/input
(4)
查看上传的文件及文件内容
-
$ bin/hdfs dfs -ls /input
-
$ bin/hdfs dfs -cat /input/*
(5)
执行worcount例子
-
$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount
-
/user/hadoop/input /user/hadoop/output (注意这里是一行命令)
注意:这里命令是bin/hadoop 而不是bin/hdfs
(6)查看输出结果
-
$ $ bin/hdfs dfs -cat /user/hadoop/output/*
-
Leon 1
-
hadoop 1
-
hello 7
-
kitty 1
-
map 1
-
olhho 1
-
reduce 1
-
world 1
阅读(2401) | 评论(0) | 转发(0) |