[toc]
搭建
节点
1 | 这里有三个节点, dp1 dp2 dp3 |
将节点信息在各节点的 /etc/hosts
内配置。
安装 jdk
1 | centos 8 |
配置免密登录
1 | ssh-keygen -t rsa -c "email" # 或者直接 ssh-keygen |
下载 hadoop
1 | wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz |
添加环境变量
1 | sudo vim /etc/profile |
修改 hadoop 配置
1 | cd ${HADOOP_HOME}/etc/hadoop |
1 | export JAVA_HOME=/usr/lib/jvm/java-11-openjdk # openjdk |
core-site.xml
1 | <configuration> |
hdfs-site.xml
1 | <property> |
yarn-site.xml
1 | <configuration> |
mapred-site.xml
1 | <configuration> |
workers
1 | dp1 |
分发 hadoop
1 | 需要在 dp2、dp3 修改 /usr/local/ 目录的写入权限 |
初始化
1 | 在 dp1 上执行 |
启动集群
1 | ${HADOOP_HOME}/sbin 目录下 |
查看集群
1 | jps |
访问
端口 | 说明 |
---|---|
8088 | 资源管理界面 |
8020 | name node rpc 端口 |
9870 | name node http 端口 |
9864 | data node http 端口 |
停掉集群
1 | sbin 下 |
配置自启动
1 | crontab -e |
Client
如果需要从本地机器向远程的 hadoop 集群传输文件,可以再从线上下载一份 hadoop 程序(保持配置),然后做下面的更改。
- 配置好 PATH
- 修改
hadoop-env.sh
里面的 JAVA_HOME /etc/hosts
添加对应的主机记录
这里需要注意的是,hadoop 集群可能是用的内网 ip,比如我搭建的 hadoop 集群在 openstack 上面,ip 用的是 10.1.0.x
。如果是连接在外部网络的机器(192.168.6.x),是不能直接访问的。
1 | 本地机器 ip |
如果直接使用下面命令。
1 | hdfs dfs -copyFromLocal /local/path/to/file /remote/path/to/save |
会报下面的错误。
1 | ➜ ~ hdfs dfs -copyFromLocal /Users/wii/heap /tmp/ |
可以看到,会直接访问 10.1.0.191 ,显然是有问题的,因为外部网络没办法直接访问 openstack 的 internal network,解决方案是设置一下路由,下面是 openstack 的网络拓扑。
内部网络是通过一个路由(192.168.6.129)和外部网络连接,下面是在本地添加静态路由的代码。
1 | sudo route add -net 10.1.0.0 -netmask 255.255.0.0 192.168.6.129 |
也可以在路由器配置。
再去 ping 就可以了。
1 | ➜ ~ ping 10.1.0.191 |
还有一个问题就是,hadoop 集群不要使用外部网络 ip,这样在传输数据的时候都要走一遍外部网络,效率极低。
权限
关闭权限控制
在内网搭建的集群,为了方便把权限关掉了。
1 | <!-- hdfs-site.xml --> |
使用 docker compose 安装
docker hub 文档参考这里,docker compose 配置参考这里 。
配置 Client
1 | 从容器拷贝 hadoop 程序 |
注意:提前配置 JAVA_HOME
测试
1 | hdfs dfs -ls / |
关闭权限控制
1 | <!-- hdfs-site.xml --> |
MR 作业
配置
作业提交 / 环境变量配置集群属性等。
1 | 代码中获取配置 |
Job
1 | setJarByClass |
文件操作
1 | 获取 FileSystem |
命令
1 | 创建目录 |