Hadoop的搭建方式有三种,本地模式,伪分布模式和完全分布式模式
<1>下载hadoop、jdk安装包到hadoop用户家目录
[root@server1 ~]# useradd -u 800 hadoop
[root@server1 ~]# mv hadoop-3.0.3.tar.gz jdk-8u181-linux-x64.tar.gz /home/hadoop/
<2>解压配置软链接
软链接目的:方便hadoop、jdk更新,只更改软链接即可
[root@server1 hadoop]# su - hadoop
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ tar zxf hadoop-3.0.3.tar.gz
[hadoop@server1 ~]$ ln -s jdk1.8.0_181/ java
[hadoop@server1 ~]$ ln -s hadoop-3.0.3 hadoop
<3>配置java环境变量
[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop[hadoop@server1 hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/home/hadoop/java
本地模式测试:
<4>通过执行hadoop自带MapReduce案例实例验证是否安装成功
[hadoop@server1 hadoop]$ cd
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ cp etc/hadoop/* input/
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop]$ cat output/*
output目录中以dfs开头的文件,则安装成功
MapReduce是一个离线计算的框架,对海量数据进行处理,采用分而治之的思想,大数据集分为小的数据集,每个数据集,进行逻辑业务的处理(map),合并统计业务结果(reduce)。
1.MapReduce将计算结果分为两个阶段,Map和Reduce.map阶段并行处理输入的数据。
reduce阶段对map结果进行汇总。2.shuffle连接map和reduce这两个阶段
map task将数据写入磁盘。
reduce task从每一个map task上读取一份数据。3.仅适合离线批处理。
具有良好的容错性和扩展性。
适合简单的批处理任务。4.缺点明显:
启动开销大,过多使用磁盘导致效率低下等。
Hadoop分布式文件系统HDFS—单数据存储节点(伪分布)
1.修改配置文件
<1>制定Namenode的地址
[hadoop@server1 ~]$ cd hadoop/etc/hadoop/
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<2>指定Datanode地址以及hdfs保存数据的副本数量
[hadoop@server1 ~]$ vim hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value> ## hdfs保存数据的副本数量为1
</property>
</configuration>
因为是单机部署,所以不需要对workers文件进行修改
2.设置ssh免密登陆
[root@server1 hadoop]# passwd hadoop
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.[root@server1 hadoop]# su - hadoop
[hadoop@server1 ~]$ ssh-keygen
[hadoop@server1 ~]$ cd .ssh/
[hadoop@server1 .ssh]$ cp id_rsa.pub authorized_keys
或者通过以下方式设置免密登录:
[hadoop@server1 ~]$ ssh-copy-id localhost
验证免密登陆:
3.格式化元数据节点(Namenode)
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
格式化后生成的文件 :
[hadoop@server1 hadoop]$ ls /tmp/
hadoop-hadoop hsperfdata_hadoop
4.开启dfs
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop[hadoop@server1 hadoop]$ sbin/start-dfs.sh
注意:一定注意/etc/hosts文件里面ip地址的解析是否对应/etc/sysconfig/network中的HOSTNAME
5.配置环境变量
注意:配置完环境变量后需使用source命令使其生效
[hadoop@server1 hadoop]$ cd
[hadoop@server1 ~]$ vim .bash_profile
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/java/bin
[hadoop@server1 ~]$ source .bash_profile ##重新加载配置文件
6.jps命令查看java进程
[hadoop@server1 ~]$ jps
11233 DataNode ##数据节点
11585 Jps
11415 SecondaryNameNode ##从元数据节点
11134 NameNode ##元数据节点
7.创建目录并上传到input
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir -p /user/hadoop ##建立目录
[hadoop@server1 hadoop]$ bin/hdfs dfs -put input/ ##上传input目录到hdfs中去
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls ##列出HDFS下的文件(默认是/user/hadoop目录下的)
8.执行hadoop中自带的wordcount程序
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output
显示如下结果就说明运行成功:
HDFS常用命令
1. 文件操作
(1) 列出HDFS下的文件
/usr/local/hadoop$bin/hadoop dfs -ls
(2) 列出HDFS文件下名为in的文档中的文件
/usr/local/hadoop$bin/hadoop dfs -ls in
(3) 上传文件
将hadoop目录下的test1文件上传到HDFS上并重命名为test:
/usr/local/hadoop$bin/hadoop dfs -put test1 test
(4) 文件被复制到本地系统中
将HDFS中的in文件复制到本地系统并命名为getin:
/usr/local/hadoop$bin/hadoop dfs -get in getin
(5) 删除文档
删除HDFS下名为out的文档:
/usr/local/hadoop$bin/hadoop dfs -rmr out
(6) 查看文件
查看HDFS下in文件中的内容:
/usr/local/hadoop$bin/hadoop dfs -cat in/*
(7) 建立目录
/usr/local/hadoop$bin/hadoop dfs -mkdir /user/hadoop/examples(目录/目录名)
只能一级一级的建目录。
(8) 复制文件
/usr/local/hadoop$bin/hadoop dfs -copyFromLocal 源路径 路径
(9)通过Hadoop命令把两个文件的内容合并起来
hdfs dfs -getmerge 位于hdfs中的原文件(里面有多个文件) 合并后的文件名
例如:
hdfs dfs -getmerge hdfs://Master:9000/data/SogouResult.txt CombinedResult
注:合并后的文件位于当前目录,不在hdfs中,是本地文件
2. 管理与更新
(1) 执行基本信息
查看HDFS的基本统计信息:
/usr/local/hadoop$bin/hadoop dfsadmin -report
(2) 退出安全模式
NameNode在启动时会自动进入安全模式。安全模式是NameNode的一种状态,在这个阶段,文件系统不允许有任何修改。
系统显示Name node in safe mode,说明系统正处于安全模式,这时只需要等待十几秒即可,也可通过下面的命令退出安全模式:
/usr/local/hadoop$bin/hadoop dfsadmin -safemode leave
(3) 进入安全模式
在必要情况下,可以通过以下命令把HDFS置于安全模式:
/usr/local/hadoop$bin/hadoop dfsadmin -safemode enter
(4)节点添加
添加一个新的DataNode节点,先在新加节点上安装好Hadoop,要和NameNode使用相同的配置(可以直接从NameNode复制),修改$HADOOP_HOME/conf/master文件,加入NameNode主机名。然后在NameNode节点上修改$HADOOP_HOME/conf/slaves文件,加入新节点名,再建立新加节点无密码的SSH连接,运行启动命令为:
/usr/local/hadoop$bin/start-all.sh
(5)负载均衡
HDFS的数据在各个DataNode中的分布可能很不均匀,尤其是在DataNode节点出现故障或新增DataNode节点时。新增数据块时NameNode对DataNode节点的选择策略也有可能导致数据块分布不均匀。用户可以使用命令重新平衡DataNode上的数据块的分布:
/usr/local/hadoop$bin/start-balancer.sh
配置好hadoop伪分布后,与本地hadoop目录下的文件都没有关系了,都是对HDFS文件系统的操作
所以删掉之前在该目录下生成的input和output目录后也不会对HDFS文件系统的操作产生影响
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
此时重新查看HDFS中的内容,文件依然存在
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output ##将HDFS中的output文件复制到本地系统
[hadoop@server1 hadoop]$ rm -fr output/
浏览器查看: