CentOS 7.3
java-1.8.0-openjdk
hadoop-3.0.0-beta1
yum install pdsh openssh
wget http://www.mirrorservice.org/sites/ftp.apache.org/hadoop/common/hadoop-3.0.0-beta1/hadoop-3.0.0-beta1.tar.gz
tar xvf hadoop-3.0.0-beta1.tar.gz
cd hadoop-3.0.0-beta1确定已设置 JAVA_HOME:
echo $JAVA_HOME
设置环境变量:
echo "export PATH=`pwd`/bin:`pwd`/sbin:\$PATH" | sudo tee /etc/profile.d/hadoop.sh
source /etc/profile.d/hadoop.sh测试一下,执行一个 grep 操作:
mkdir input
cp etc/hadoop/*.xml input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-beta1.jar grep input output 'dfs[a-z.]+'
cat output/*得到输出:
1 dfsadmin
在 etc/hadoop/core-site.xml 中增加:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>在 etc/hadoop/hdfs-site.xml 中增加:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>确保 ssh localhost 能成功,配置方法如下:
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
yum install openssh-server
ssh-keygen -A
/usr/sbin/sshd启动 HDFS:
$ hdfs namenode -format
# 不能用 root 账户,日志在 logs/ 下面
$ start-dfs.sh
# 查看打开的三个进程
$ jps
... DataNode
... NameNode
... SecondaryNameNode然后,可以用浏览器访问 NameNode:http://localhost:9870/。
在 HDFS 中创建 MapReduce 任务需要的目录,然后执行任务:
hdfs dfs -mkdir -p /user/<当前用户名> # HOME
hdfs dfs -mkdir input # ~/input
hdfs dfs -put etc/hadoop/*.xml input
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-beta1.jar grep input output 'dfs[a-z.]+'
hdfs dfs -cat output/*
hdfs dfs -get output output得到输出:
1 dfsadmin
1 dfs.replication
停止 HDFS:
stop-dfs.sh修改 etc/hadoop/mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>修改 etc/hadoop/yarn-site.xml:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>启动服务:
start-dfs.sh
start-yarn.sh # 启动 ResourceManager,NodeManager可通过浏览器访问 ResourceManager:http://localhost:8088/。
运行 MapReduce 任务:
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-beta1.jar pi 5 10停止服务:
stop-dfs.sh
stop-yarn.sh有如下几点不同:
- NameNode 端口不同:http://localhost:50070/。
yarn-site.xml中可以不设置yarn.nodemanager.env-whitelist。
修改 hdfs-site.xml:
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-${user.name}</value>
</property>
dfs.namenode.name.dir、dfs.namenode.checkpoint.dir、dfs.datanode.data.dir 不需要单独设置,它们都引用了 hadoop.tmp.dir。
/tmp/hadoop-<USER>/dfs
如果在 NameNode 和 DataNode 启动的情况下执行 hdfs namenode -format,NameNode 将被格式化,但是 DataNode 中的数据还在,就造成了混乱。按如下顺序执行即可:
rm -rf /tmp/hadoop-<USER> # 清除数据
hdfs namenode -format
strat-dfs.shHDFS 数据存储路径在 hdfs-site.xml 的 dfs.datanode.data.dir 中配置,缺省值是 /tmp/hadoop-<USER>/dfs/data/。
hdfs dfsadmin -safemode leave单机模式不能配置 core-site.xml 中的 fs.defaultFS。