大数据项目实战 - hadoop 集群搭建

发布于 2023-07-13 19:32:14 字数 11092 浏览 36 评论 0

主机清单

角色外网ip内网ip
header120.77.44.77172.18.179.240
worker-139.108.184.123172.18.179.241
worker-239.108.1.16172.18.179.242

账户信息都是:

  • root: M2J*b7AKjkaZi]Hw
  • hadoop: ganZHEyu

linux 初始配置

添加 hadoop 用户

$ adduser hadoop
$ passwd hadoop  # 密码为 ganZHEyu

声明可以使用hadoop用户可以使用任何命令且不使用密码

$ su -   # 输入密码切换为root切换
$ vim /etc/sudoers  # 编辑该文件,
1. 在“root ALL=(ALL)ALL"行下面添加"xxx ALL=(ALL)ALL",其中xxx是你要添加的用户名hadoop。因为该文件是只读的,所以输入":wq!"退出。
2. 添加“hadoop  ALL=(root)NOPASSWD:ALL”

修改 hostname 与地址映射

依次修改 host 名: header, worker-1, worker-2。

$ hostnamectl set-hostname header

添加地址映射

$ vim /etc/hosts  # 添加以下内容
172.18.179.240  header
172.18.179.241  worker-1
172.18.179.242  worker-2

$ reboot # 重启生效

免密登录设置

配置 header 免密登录 worker-1, worker-2

$ ssh-keygen  # 生成秘钥
$ ssh-copy-id hadoop@worker-1  # 输入密码,推送公钥到worker-1
$ ssh-copy-id hadoop@worker-2  # 输入密码,推送公钥到worker-2

安装 java

/opt 目录下创建:softwares, tools, modules, datas 四个目录

$ cd /opt/software
$ tar -xzf jdk-7u67-linux-x64.tar.gz /opt/modules/ # 安装java

添加 java 环境变量,编辑文件 /etc/profile , 末尾添加以下内容

# JAVA_HOME
export JAVA_HOME=/opt/modules/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin

Hadoop 部署

选择2.5以上 hadoop 版本,下载的地方:

下载 hadoop 安装包并解压

$ cd /opt/softwares/
$ tar -xzf hadoop-2.5.0.tar.gz -C /opt/modules/

添加 hadoop 主目录到环境变量,编辑 /etc/profile 文件,添加以下两行

# HADOOP_HOME
export HADOOP_HOME=/opt/modules/hadoop-2.5.0
export PATH=$PATH:$HADOOP_HOME/bin

并重新加载

$ source /etc/profile

配置 hdfs

配置 java 环境变量

在 hadoop-env.sh、mapred-enc.sh、yarn-env.sh3 个文件中添加java环境变量:

export JAVA_HOME=/opt/modules/jdk1.7.0_67

配置 hdfs-site.xml

设置 dfs.replication=2,副本数为2,默认为3.

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>

    <property>
        <name>dfs.permissions.enabled</name>
        <value>false</value>
    </property>
</configuration>

配置 core-site.xml

  • 配置 hdfs 网络服务为 hdfs://header:9000
  • 配置用户为 hadoop;
  • 配置日志目录为 /opt/modules/hadoop-2.5.0/data/tmp,修改了该地方,hdfs 需要重新初始化。
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://header:9000</value>
    </property>

    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/modules/hadoop-2.5.0/data/tmp</value>
    </property>
</configuration>

配置 slaves

header
worker-1
worker-2

启动服务

$ bin/hdfs namenode -format # 格式化文件系统hdfs
$ sbin/hadoop-daemon.sh start namenode  # 启动namenode
$ sbin/hadoop-daemon.sh start datanode  # 启动datanode, header上也规划了一个datanode
$ jps # 查看服务是否都正常打开
4405 Jps
3253 DataNode
2707 NameNode

输入 http://header:50070/ 访问 hdfs 管理页面。拷贝配置好的 hadoop 到 worker-1, worker-2。

$ scp -r hadoop-2.5.0 hadoop@worker-1:/opt/modules
$ scp -r hadoop-2.5.0 hadoop@worker-2:/opt/modules

启动 worker-1, worker-2 上的 datanode

$ sbin/hadoop-daemon.sh start datanode

配置 yarn

配置 yarn 编辑文件 yarn-site.xml 添加

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>header</value>
    </property>

    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>header:8088</value>
    </property>

    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>

    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>-1</value>
    </property>

</configuration>

配置 mapreduce 编辑文件 mapred-site.xml 添加

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>header:10020</value>
    </property>

    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>header:19888</value>
    </property>

</configuration>

拷贝配置好的 hadoop 到 worker-1、worker-2,然后启动相应服务看 yarn 和 mapreduce 是否配置正常

$ sbin/yarn-daemon.sh start nodemanager
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/mr-jobhistory-daemon.sh start historyserver
$ jps  # 查看服务是否都正常打开
3706 JobHistoryServer
4405 Jps
3253 DataNode
4012 NodeManager
4142 ResourceManager
2707 NameNode

输入 http://header:8088/ 访问 yarn 管理页面,添加 worker-1, worker-2 到集群 yarn,分别在 worker-1, worker-2 下执行:

$ sbin/yarn-daemon.sh start nodemanager

测试 hdfs 和 yarn 是否安装正常

编辑文本 test

hadoop  spark
yarn  spark hadoop hadoop
hive hive spark hadoop

上传到 hdfs,并执行 hadoop 官方例子:world_count

$ hadoop fs -put -p test /user/hadoop/wc.input
$ yarn jar /opt/modules/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/hadoop/wc.input/   /user/hadoop/wc.output
$ hadoop fs -text  /user/hadoop/wc.output/part-r-00000 # 查看运行后的结果
hadoop    3
hive    3
java    2
spark    3

机器时间同步

因为使用的是阿里云的ECS,里面已设置了时间同步。 TODO: 需补充机器时间同步的设置

ZooKeeper

解压到安装目录

$ tar zxf zookeeper-3.4.5.tar.gz -C /opt/modules/

修改配置文件

$ cp ${ZOOKEEPER_HOME}/conf/zoo_sample.cfg ${ZOOKEEPER_HOME}/conf/zoo.cfg  # 拷贝一个zoo.cfg文件
$ mkdir ${ZOOKEEPER_HOME}/zkData   # ${ZOOKEEPER_HOME}=/opt/modules/zookeeper-3.4.5, 创建一个存放数据的文件夹

编辑配置文件zoo.cfg

dataDir=/opt/modules/zookeeper-3.4.5/zkData

server.1=header:28888:38888
server.2=worker-1:28888:38888
server.3=worker-2:28888:38888

还需要创建唯一标识,如server.1中的1,需要在dataDir目录下创建myid文件,内容编辑为1。拷贝安装配置好的ZooKeeper到worker-1, worker-2. 分别修改唯一标识myid为2,3

注意:安装的zookeeper服务数= 2n+1。 n为可损坏的机器数,这里为1.

其中header,worker-1,worker-2上的zookeeper服务

$ bin/zkServer.sh start  # 启动服务
$   # 查看进程

启动服务

header

$ bin/hdfs namenode -format
$ sbin/hadoop-daemon.sh start namenode
$ sbin/hadoop-daemon.sh start datanode
$ sbin/yarn-daemon.sh start nodemanager
$ sbin/yarn-daemon.sh start resourcemanager
$ sbin/mr-jobhistory-daemon.sh start historyserver
$ bin/zkServer.sh start

worker

$ sbin/hadoop-daemon.sh start datanode
$ sbin/yarn-daemon.sh start nodemanager
$ bin/zkServer.sh start

其他

阿里云安全组

使用阿里云时,需要注意使用安全组,配置上需要开放的端口。

本地host

本地机器需添加以下host方便访问服务器:

120.77.44.77    header
39.108.184.123  worker-1
39.108.1.16     worker-2

问题

1. 无法启动 datanode 报错 ulimit -a for user root

datanamenode 运行时打开文件数,达到系统最大限制

$ ulimit -n   # 查看当前最大限制
65536
$ vim /etc/security/limits.conf  # 修改nofile限制

加上:

* soft nodefile 102400
* hard nodefile 409600

还不能解决,就清除hadoop.tmp.dir对应目录下对应的文件。

2.配置 hadoop 集群 namenode 的 hostname 千万不要包含下划线

在部署 hadoop 集群时,core-site.xml 中的 fs.defaultFS 项的 value 不可包含下划线,否则会报以下错误

************************************************************/
15/11/16 01:36:22 INFO namenode.NameNode: registered UNIX signal handlers for [TERM, HUP, INT]
15/11/16 01:36:22 INFO namenode.NameNode: createNameNode []
15/11/16 01:36:22 INFO impl.MetricsConfig: loaded properties from hadoop-metrics2.properties
15/11/16 01:36:23 INFO impl.MetricsSystemImpl: Scheduled snapshot period at 10 second(s).
15/11/16 01:36:23 INFO impl.MetricsSystemImpl: NameNode metrics system started
15/11/16 01:36:23 INFO namenode.NameNode: fs.defaultFS is hdfs://local_master:9000
15/11/16 01:36:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
15/11/16 01:36:23 FATAL namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: Does not contain a valid host:port authority: local_master:9000
    at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:212)
    at org.apache.hadoop.net.NetUtils.createSocketAddr(NetUtils.java:164)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:384)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:436)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.getAddress(NameNode.java:415)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.getRpcServerAddress(NameNode.java:466)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.loginAsNameNodeUser(NameNode.java:566)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:586)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:764)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.<init>(NameNode.java:748)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1441)
    at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1507)
15/11/16 01:36:23 INFO util.ExitUtil: Exiting with status 1
15/11/16 01:36:23 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at local_master/192.168.3.10

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

悟红尘

暂无简介

文章
评论
770 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文