文章目录
一、 hadoop简介
官方网址:https://hadoop.apache.org
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。
HDFS为海量的数据提供了存储。
MapReduce为海量的数据提供了计算。
Hadoop框架包括以下四个模块:
Hadoop Common: 这些是其他Hadoop模块所需的Java库和实用程序。这些库提供文件系统和操作系统级抽象,并包含启动Hadoop所需的Java文件和脚本。
Hadoop YARN: 这是一个用于作业调度和集群资源管理的框架。
Hadoop distributed File System (HDFS): 分布式文件系统,提供对应用程序数据的高吞吐量访问。
Hadoop MapReduce:这是基于YARN的用于并行处理大数据集的系统。
@L_404_8@二、 HDFS分布式文件存储系统单机版部署
1. 下载解压相关资源包
[root@server1 ~]# useradd hadoop ##首先创建普通用户并给定密码,使用普通用户的身份来运行
[root@server1 ~]# echo westos | passwd --stdin hadoop
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ls ##下载解压相关资源包
hadoop-3.2.1.tar.gz jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ls
hadoop-3.2.1.tar.gz jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ln -s jdk1.8.0_181/ java ##为可执行的二进制程序做软链接,便于之后的升级
[hadoop@server1 ~]$ tar zxf hadoop-3.2.1.tar.gz
[hadoop@server1 ~]$ ls
hadoop-3.2.1 hadoop-3.2.1.tar.gz java jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ln -s hadoop-3.2.1 hadoop
[hadoop@server1 ~]$ ll
total 532076
lrwxrwxrwx 1 hadoop hadoop 12 May 10 17:18 hadoop -> hadoop-3.2.1
drwxr-xr-x 9 hadoop hadoop 149 Sep 11 2019 hadoop-3.2.1
-rw------- 1 hadoop hadoop 359196911 May 10 17:17 hadoop-3.2.1.tar.gz
lrwxrwxrwx 1 hadoop hadoop 13 May 10 17:17 java -> jdk1.8.0_181/
drwxr-xr-x 7 hadoop hadoop 245 Jul 7 2018 jdk1.8.0_181
-rw------- 1 hadoop hadoop 185646832 May 10 17:17 jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ cd hadoop
2. 准备启动hadoop集群
[hadoop@server1 hadoop]$ ls
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim hadoop-env.sh ##设置hadoop全局环境变量
export JAVA_HOME=/home/hadoop/java ##设置java安装的根目录
export HADOOP_HOME=/home/hadoop/hadoop
默认情况下,Hadoop 被配置为以非分布式模式运行,作为单个 Java 过程。这对于调试很有用。
以下示例将未包装的 conf 目录复制为输入,然后查找并显示给定常规表达式的每个匹配项。输出已写入给定的输出目录。
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ cp etc/hadoop/*.xml input
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+' ##使用系统给定的jar包做测试
[hadoop@server1 hadoop]$ ls input/
capacity-scheduler.xml hadoop-policy.xml httpfs-site.xml kms-site.xml yarn-site.xml
core-site.xml hdfs-site.xml kms-acls.xml mapred-site.xml
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000 _SUCCESS
[hadoop@server1 output]$ cat * ##查看输出内容
1 dfsadmin
三、伪分布式存储系统部署
- 编辑配置文件
Hadoop 也可以在伪分布式模式下的单节点上运行,其中每个 Hadoop daemon 在单独的 Java 进程中运行。
[hadoop@server1 output]$ cd ..
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
[hadoop@server1 hadoop]$ vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> ##存储副本数,默认是三份,现在因为我们用一个节点做伪分布式,因此设置为1份
</property>
</configuration>
core-site.xml
hdfs-site.xml
2. 做本地免密
默认情况下,hdfs会通过免密连接worker节点(数据存储节点)来启动相应的进程。在hadoop/etc/目录下会有workers的文件,文件中指定了worker节点
[hadoop@server1 hadoop]$ ssh-keygen ##本地免密
[hadoop@server1 hadoop]$ ssh-copy-id localhost
[hadoop@server1 hadoop]$ ll workers
-rw-r--r-- 1 hadoop hadoop 10 Sep 10 2019 workers
[hadoop@server1 hadoop]$ cat workers
localhost
[hadoop@server1 hadoop]$ ssh localhost
Last login: Mon May 10 23:42:32 2021
[hadoop@server1 ~]$ logout
Connection to localhost closed.
[hadoop@server1 hadoop]$
3. 启动进程
[hadoop@server1 hadoop]$ bin/hdfs namenode -format ##格式化文件系统,产生的数据存储在/tmp/目录中
[hadoop@server1 hadoop]$ id
uid=1001(hadoop) gid=1001(hadoop) groups=1001(hadoop)
[hadoop@server1 hadoop]$ sbin/start-dfs.sh ##启动NameNode进程和Datanode进程
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [server1]
[hadoop@server1 ~]$ vim .bash_profile
$HOME/java/bin ##设置环境变量
[hadoop@server1 ~]$ source .bash_profile
[hadoop@server1 ~]$ jps ##显示当前系统开启的java进程
14752 Jps
14548 SecondaryNameNode
14234 NameNode
14347 Datanode ##namenode节点上缓存的是整个分布式文件系统的元数据,datanode存储的是真正的数据,当NameNode挂掉后,SecondaryNameNode会接管。
[hadoop@server1 ~]$ netstat -antlp
4. 访问网页进行测试
访问网页进行测试: http://localhost:9870/
5. 创建存储目录
[hadoop@server1 ~]$ cd hadoop/
[hadoop@server1 hadoop]$ bin/hdfs
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop ##相当于创建用户在分布式文件系统中的家目录
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
[hadoop@server1 hadoop]$ ls
bin etc include input lib libexec LICENSE.txt logs NOTICE.txt output README.txt sbin share
[hadoop@server1 hadoop]$ rm -fr output/
[hadoop@server1 hadoop]$ bin/hdfs dfs -put input ##将input目录中的内容上传到分布式文件存储系统中
启动分布式文件系统时要保证所有节点时间必须同步,而且解析要有,否则会报错。并且分布式文件系统中依然不能提前创建output目录,网页要保证之前没有output目录.
其他示例
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount input output
6. 复制输出文件到本地文件系统
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
[hadoop@server1 hadoop]$ bin/hdfs dfs -cat output/*
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output
2021-05-11 05:23:58,659 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
[hadoop@server1 hadoop]$ ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt output README.txt sbin share
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ cat *
[hadoop@server1 output]$ ls
part-r-00000 _SUCCESS
[hadoop@server1 output]$ cd ..
[hadoop@server1 hadoop]$ rm -fr output/ ##删除本地存储,不会删除分布式存储系统中的存储
[hadoop@server1 hadoop]$ bin/hdfs dfs -rm -r output ##删除分布式存储系统中的存储
Deleted output
图形界面上删除时会有权限控制,不能随意删除。
四、完全分布式存储系统部署
- 开启两个新的虚拟机server2、server3
(1)在新开启的虚拟机上同样创建hadoop用户
(2)server1上的hdfs先停掉
(3)搭建nfs文件共享系统,server1为nfs服务器
(4)server2和server3挂载server1的hadoop目录到指定目录下从而实现数据同步
server2 server3
useradd hadoop
echo westos | passwd --stdin hadoop
yum install -y nfs-utils
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [server1]
[hadoop@server1 hadoop]$ logout
[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# vim /etc/exports
/home/hadoop *(rw,anonuid=1001,anongid=1001)
3. 查看同步是否生效
[root@server2 ~]# showmount -e 192.168.0.1 ##查看是否生效
Export list for 192.168.0.1:
/home/hadoop *
[root@server2 ~]# mount 192.168.0.1:/home/hadoop/ /home/hadoop/ ##挂载server1上的hadoop目录到本地指定目录下
[root@server2 ~]# df
[root@server2 ~]# su - hadoop
[hadoop@server2 ~]$ ls
hadoop hadoop-3.2.1 hadoop-3.2.1.tar.gz java jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz
[hadoop@server2 ~]$ ssh server1
4. 查看每个节点之间是否免密
5. 在server1上修改hadoop相关配置文件、删除/tmp/目录下上次初始化产生的文件并重新初始化、启动hdfs
[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
[hadoop@server1 hadoop]$ vim workers
[hadoop@server1 hadoop]$ vim hdfs-site.xml
core-site.xml:
workers:
hdfs-site.xml:
[hadoop@server1 hadoop]$ rm -fr /tmp/*
[hadoop@server1 ~]$ cd hadoop/
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [server1]
Starting datanodes
Starting secondary namenodes [server1]
[hadoop@server1 hadoop]$ jps
8788 SecondaryNameNode
8902 Jps
8568 NameNode
[hadoop@server2 ~]$ jps
14124 Jps
14063 Datanode
6. 网页测试,上传文件到分布式存储系统中进行测试
[hadoop@server1 hadoop]$ dd if=/dev/zero of=bigfile bs=1M count=200
[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -put bigfile
7. 节点热添加
server4
useradd hadoop
yum install -y nfs-utils
mount 192.168.0.1:/home/hadoop/ /home/hadoop/
su - hadoop
[hadoop@server4 hadoop]$ jps
3722 Jps
[hadoop@server4 hadoop]$ cd etc/hadoop/
[hadoop@server4 hadoop]$ vim workers
[hadoop@server4 hadoop]$ cat workers
server2
server3
server4
[hadoop@server4 hadoop]$ cd ..
[hadoop@server4 etc]$ cd ..
[hadoop@server4 hadoop]$ bin/hdfs --daemon start datanode ##启动datanode进程
[hadoop@server4 hadoop]$ jps
3846 Jps
3786 Datanode
网页查看,节点已添加
[hadoop@server4 hadoop]$ ls
bigfile bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
[hadoop@server4 hadoop]$ mv bigfile demo
[hadoop@server4 hadoop]$ ls
bin demo etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share
[hadoop@server4 hadoop]$ bin/hdfs dfs -put demo ##在分布式存储系统中上传文件进行测试
在哪个节点上上传将会被优先分配到哪个节点上
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。