Hadoop配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为…
hadoop运行方式
- 本地运行
- 只用来演示官方示例
- 数据存储在本地
- 伪分布式
- 数据存储在HDFS中
- 完全分布式
- 数据存储在HDFS中
- 多台服务器工作
Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar可以看到所有例子),包括 wordcount、terasort、join、grep 等。
伪分布式
Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
core-site.xml
修改为下面配置:
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>这个属性是数据位置,这里指定为本地的/usr/local/hadoop/tmp,默认是file:/tmp/hadoop</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<description>本地作为namenode</description>
</property>
</configuration>hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>hdfs是配置hdfs文件系统的,这里指定了名称节点和数据节点位置
伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行 NameNode 的格式化:
cd /usr/local/hadoop
./bin/hdfs namenode -format注意namenode格式化只能执行一次
*启动 Hadoop 时提示 Could not resolve hostname*:
如果启动 Hadoop 时遇到输出非常多ssh: Could not resolve hostname xxx的异常情况
这个并不是 ssh 的问题,可通过设置 Hadoop 环境变量来解决。首先中断启动,然后在 ~/.bashrc 中,增加如下两行内容(:
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native保存后,务必执行 source ~/.bashrc 使变量设置生效,然后再次执行 ./sbin/start-dfs.sh 启动 Hadoop。
完全分布式
建议设置:
| 节点1 | 节点2 | 节点3 | |
|---|---|---|---|
| HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
| YARN | NodeManage | ResourceManage NodeManage | NodeManage |
NameNode和SecondaryNameNode不放在一个服务器
ResourceManage和NameNode不在一台服务器
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定 NameNode 的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://host1:8020</value>
</property>
<!--指定 Hadoop 的数据存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data</value>
</property>
<!--配置HDFS网页登陆使用的静态用户名()-->
<property>
<name>hadoop.http.staticuser.user</name>
<value>$username</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--配置NameNode的Web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>host1:9870</value>
</property>
<!--配置SecondaryNameNode的Web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>host3:9868</value>
</property>
</configuration>
yarn-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-service</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>host2</value>
</property>
<!--环境变量的继承(解决一个小BUG)-->
<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>mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--指定MapReduce程序运行在Yarn上,默认值是“local”,即本地运行-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>配置workers
文件添加的内容不能有空行,也不能结尾空格
有几个节点,这里就配置几个
host1
host2
host3这里用到主机解析在
/etc/hosts文件里进行修改
如果集群是第一次启动,需要在
host1节点格式化NameNode(注意:格式 化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。hadoop namenode -format hdfs namenode -format
Web查看HDFS的NameNode
http://host1:9870
Web查看YARN的ResourceManager
http://host2:8088
文件介绍
常见命令
hadoop jar jar包路径 输入参数
#例如统计单词数量
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /tmp/a.txt ./out
#统计 /tmp/a.txt 里面单词的数量运行单机hadoop时不需要启动
文件系统操作命令
#创建文件夹
./bin/hdfs dfs -mkdir -p /user/hadoop
#上传文件
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
#查看目录
./bin/hdfs dfs -ls input
# 将 HDFS 上的 output 文件夹拷贝到本机
./bin/hdfs dfs -get output ./output
# 删除 output 文件夹
./bin/hdfs dfs -rm -r output
...文件同步命令
scp
#文件复制命令
scp -r 目录或文件名 usr@host:目录/文件
-r 递归
目录或文件名:要拷贝的文件路径/名称
目的的用户@主机:目的地路径/名称
rsync(远程同步工具)
rsync -av 目录或文件名 usr@host:目录/文件
-a 归档拷贝
-v 显示复制过程评论
评论加载中……