-
准备 3台linux 分别hostname为: node-1,node-2,node-3
在第一台机子 vi /etc/hostname node1 在第2台机子 vi /etc/hostname node2 在第3台机子 vi /etc/hostname node3
修改后需要重启没台机器
-
配置免密(在node1 主节点操作)
ssh-genkey -t rsa #4个空格
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
- 安装 JDK 并配置 环境变量
tar -zxvf jdk.tar.gz -C /usr/local/
配置环境变量
vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_291
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
source /etc/profile
在node1 操作
scp jdk安装路径 root@node2 /usr/local
scp jdk安装路径 root@node3 /usr/local
-
通过xshell等ssh 工具 查看3台机子的时间是否一致(需通过成一致的时间)
xshell 查看-撰写-撰写窗口-全部会话(可以在敲一遍命名 在所有窗口生效) -
修改每台机子的hosts文件
vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.220 node-1 192.168.1.222 node-2 192.168.1.223 node-3
-
解压hadoop安装包
tar -zxvf hadoop-3.3.1.tar.gz
-
vi /usr/local/hadoop-3.3.1/etc/hadoop/hadoop-env.xml
#配置jdk JAVA_HOME=/usr/local/jdk1.8.0_301
#文末添加 export HDFS_NAMENODE_USER=root export HDFS_DATANODE_USER=root export HDFS_SECONDARYNAMENODE_USER=root export YARN_RESOURCEMANAGER_USER=root export YARN_NODEMANAGER_USER=root
-
vi /usr/local/hadoop-3.3.1/etc/hadoop/core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://node1:8020</value> </property> <!-- 设置Hadoop本地保存数据路径 --> <property> <name>hadoop.tmp.dir</name> <value>/app/data/hadoop-3.3.1</value> </property> <!-- 设置HDFS web UI用户身份 --> <property> <name>hadoop.http.staticuser.user</name> <value>root</value> </property> <!-- 整合hive 用户代理设置 --> <property> <name>hadoop.proxyuser.root.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.root.groups</name> <value>*</value> </property> <!-- 垃圾桶文件保存时间 --> <property> <name>fs.trash.interval</name> <value>1440</value> </property> </configuration>
-
vi /usr/local/hadoop-3.3.1/etc/hadoop/hdfs-site.xml
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>node-2:50090</value> </property> <property> <name>dfs.datanode.handler.count</name> <value>50</value> </property> </configuration> ```
-
vi /usr/local/hadoop-3.3.1/etc/hadoop/mapred-site.xml
<configuration> <!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!-- MR程序历史服务器端地址 --> <property> <name>mapreduce.jobhistory.address</name> <value>node1:10020</value> </property> <!-- 历史服务器web端地址 --> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>node1:19888</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value> </property> </configuration>
-
vi /usr/local/hadoop-3.3.1/etc/hadoop/yarn-site.xml
<configuration> <!-- 设置YARN集群主角色运行机器位置 --> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 是否将对容器实施物理内存限制 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!-- 是否将对容器实施虚拟内存限制。 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <!-- 开启日志聚集 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置yarn历史服务器地址 --> <property> <name>yarn.log.server.url</name> <value>http://node1:19888/jobhistory/logs</value> </property> <!-- 保存的时间7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property> </configuration>
-
vi /usr/local/hadoop-3.3.1/etc/hadoop/workers
node-1 node-2 node-3
-
配置hadoop环境变量(vi /etc/profile)
export HADOOP_HOME=/app/soft/hadoop-3.3.1 export PATH=$PATH:$HADOOP_HOME/bin: $HADOOP_HOME/sbin
-
复制文件
scp -r hadoope root@node2:/usr/local/
- 格式化
```
格式化 hadoop
首次启动需要格式化是进行文件系统的初始化操作,创建一些自己需要的文件
启动后,不在需要格式化
必须在主节点上(主机器)操作
hdfs namenode -format 或 hadoop namenode -format
```
一键启动
主机器操作许配置 slaves 和 ssh 免密登入
进入 hadoop 下 sbin 文件夹下 start-dfs.sh(sdfs 集群)和 start-yarn.sh(yarn 集群) 或者 start-all.sh(sdfs 和 yarn 集群同时启动)
//启动历史
mr-jobhistory-daemon.sh start historyserver
启动时报错:
修改配置21和22
```
查看启动结果 jps 命令
13248 NameNode
13345 DataNode
13610 ResourceManager
13757 Jps
13711 NodeManager
提示 一下标识成功或者访问 ip:50070 页面
```
- 将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
```
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
```
web 页面: node1:9870 和 node1:8088
19. start-yarn.sh,stop-yarn.sh
```
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
```
20 . 如果启动后没有datenode节点要删除 core-site.xml中的路径在执行格式化
21. 通过浏览器http://ip:9870访问页面
22. java操作HDFS
```
//连接hdfs
configuration conf =new Configuration();
conf.set(fs.defaultFs,“hdfs://node-1:9000”)
//设置用户身份
方式1:System.setProperty("HADOOP_USER_NAME","root")
方式2:FileSystem fs=FileSystem.get(new URI("hdfs://node-1:9000"),conf,"root");
FileSystem fs=FileSystem.get(conf);
//操作
fs.xxxx()
fs.close()
---------------------------获取遍历文件--------
RemoteInterator<LocatedFIleStatus> list=fs.listFIles(path,true);
while(list.hasnext()){LocatedFIleStatus f=list.next()};
--------------------------上传文件流操作---------------------------------------------
FSDataOutputStream out=fs.create(new Path(文件),true);
FIleInputStream in=new FIleInputstream("D://文件");
IOUtils.copy(in, out );
---------------------------------------------------------------------------------
```