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

修改为下面配置:

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

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.defaultFSdfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

配置完成后,执行 NameNode 的格式化:

bash
cd /usr/local/hadoop
./bin/hdfs namenode -format

注意namenode格式化只能执行一次

*启动 Hadoop 时提示 Could not resolve hostname*:

如果启动 Hadoop 时遇到输出非常多ssh: Could not resolve hostname xxx的异常情况

这个并不是 ssh 的问题,可通过设置 Hadoop 环境变量来解决。首先中断启动,然后在 ~/.bashrc 中,增加如下两行内容(:

shell
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
HDFSNameNode
DataNode

DataNode
SecondaryNameNode
DataNode
YARN
NodeManage
ResourceManage
NodeManage

NodeManage

NameNodeSecondaryNameNode不放在一个服务器

ResourceManageNameNode不在一台服务器

core-site.xml

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
<?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
<?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
<?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,导致NameNodeDataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenodedatanode进程,并且要删除所有机器的datalogs目录,然后再进行格式化。

hadoop namenode -format
hdfs namenode -format

Web查看HDFS的NameNode

http://host1:9870

Web查看YARN的ResourceManager

http://host2:8088

文件介绍

常见命令

shell
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时不需要启动

文件系统操作命令

shell
#创建文件夹
./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
shell
#文件复制命令
scp -r 目录或文件名 usr@host:目录/文件
-r 递归
目录或文件名:要拷贝的文件路径/名称
目的的用户@主机:目的地路径/名称
rsync(远程同步工具)
rsync -av 目录或文件名 usr@host:目录/文件
-a 归档拷贝
-v 显示复制过程

评论

评论加载中……