• Hadoop是Apache基金会开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
• Hadoop框架最核心技术包括:Common、HDFS、MapReduce和YARN。HDFS为海量的数据提供了分布式存储,MapReduce为海量的数据提供分布式计算,YARN为海量的数据提供分布式资源调度框架。
common(工具类):包括Hadoop常用的工具类,由原来的Hadoopcore部分更名而来。主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。
Hadoop Distributed File System(HDFS):Hadoop实现了一个分布式的文件系统,HDFS为海量的数据提供了存储。HDFS是基于节点的形式进行构建的,里面有一个父节点NameNode,他在机器内部提供了服务,NameNode本身不干活,NameNode将数据分成块,只是把数据分发给子节点,交由子节点来进行存储,由于只存在一个父节点,所以这是HDFS的一个缺点,单点失败。以及n个子节点dataNode,dataNode在机器内部提供了数据块,存储在HDFS的数据被分成块,然后将这些块分到多个计算机(dataNode)中,这与传统的RAID架构大有不同。块的大小(通常为64MB)和复制的块数量在创建文件时由客户机决定。NameNode可以控制所有文件操作。
MapReduce:基于YARN的大型数据集并行处理系统。是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
YARN:分布式集群资源管理框架,管理者集群的资源(Memory,cpu core)
合理调度分配给各个程序(MapReduce)使用
主节点:resourceManager 掌管集群中的资源
从节点:nodeManager 管理每台集群资源
qing@qing-Inspiron-3437:/lib$ java
Command 'java' not found, but can be installed with:
sudo apt install default-jre # version 2:1.11-72, or
sudo apt install openjdk-11-jre-headless # version 11.0.15+10-0ubuntu0.20.04.1
sudo apt install openjdk-16-jre-headless # version 16.0.1+9-1~20.04
sudo apt install openjdk-17-jre-headless # version 17.0.3+7-0ubuntu0.20.04.1
sudo apt install openjdk-8-jre-headless # version 8u312-b07-0ubuntu1~20.04
sudo apt install openjdk-13-jre-headless # version 13.0.7+5-0ubuntu1~20.04
使用如下命令安装
sudo apt install openjdk-11-jre-headless
验证安装
java -version
sudo useradd -m hadoop -s /bin/bash
sudo passwd hadoop
sudo adduser hadoop sudo
切换为hadoop用户
su hadoop
sudo apt-get install openssh-server
安装后,可使用以下命令登录本机:
ssh localhost
输入 yes 与用户密码,就可以登录到本机,详细输出如下:
退出登录
exit
配置无密码登录
cd ~/.ssh/
ssh-keygen -t rsa
注意这里第二步要你输入文件名时不用输入,直接一路 Enter 选择默认值就好了!
cat ./id_rsa.pub >> ./authorized_keys
到官网下载 https://hadoop.apache.org/,下载速度慢的话,搜索清华镜像
找到下载的文件,打开终端,解压和重命名
sudo tar -zxf hadoop-3.3.3.tar.gz -C /usr/local
sudo mv hadoop-3.3.3/ hadoop
给与这个文件夹权限
cd /usr/local
sudo chown -R hadoop ./hadoop/
首先运行命令查看Java的路径:
$ update-alternatives --config java
链接组 java (提供 /usr/bin/java)中只有一个候选项:/usr/lib/jvm/java-11-openjdk-amd64/bin/java
无需配置。
$vim ~/.bashrc
#
export JAVA_HOME=/lib/jvm/java-1.11.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib/native"
#HADOOP VARIABLES END
$ source ~/.bashrc
修改hadoop-env.sh文件
文件的路径为:/usr/local/hadoop/etc/hadoop/hadoop-env.sh,找到对应的行,将内容改为:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
修改core-site.xml文件
在修改这个文件之前,我们需要使用超级用户创建一个目录,并给予hduser该目录的权限:
$ sudo mkdir -p /app/hadoop/tmp
$ sudo chown hadoop:hadoop /app/hadoop/tmp
修改配置文件,文件路径:/usr/local/hadoop/etc/hadoop/core-site.xml,使用VIM,将配置改为:
hadoop.tmp.dir
/app/hadoop/tmp
A base for other temporary directories.
fs.default.name
hdfs://localhost:54310
The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.
修改mapred-site.xml
使用VIM打开,修改配置如下:
mapred.job.tracker
localhost:54311
The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
修改hdfs-site.xml文件
在修改之前,创建需要用到的目录:
$ sudo mkdir -p /usr/local/hadoop_store/hdfs/namenode
$ sudo mkdir -p /usr/local/hadoop_store/hdfs/datanode
$ sudo chown -R hadoop:hadoop /usr/local/hadoop_store
修改配置文件:/usr/local/hadoop/etc/hadoop/hdfs-site.xml,改为:
dfs.replication
1
Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.
dfs.namenode.name.dir
file:/usr/local/hadoop_store/hdfs/namenode
dfs.datanode.data.dir
file:/usr/local/hadoop_store/hdfs/datanode
$ hadoop namenode –format
如果发现hadoop这个命令不认识,那是因为环境变量没有载入,最简单办法就是登出,然后再登入hduser就可以了。这个命令会删掉所有已经存在的数据,所以如果已经有数据的情况下,慎用这个命令。
首先启用无密码的ssh。不然接下来启动的时候会不断的提示输入密码,很烦人。
ssh-keygen -t rsa
默认位置,无密码生成密钥。
chmod 755 ~/.ssh
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
接下来我们试一下使用ssh连接本地,看能连接成功不:
ssh localhost
接下来是启动Hadoop的服务。
hadoop@qing-Inspiron-3437:~/.ssh$ start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [qing-Inspiron-3437]
Starting resourcemanager
resourcemanager is running as process 10368. Stop it first and ensure /tmp/hadoop-hadoop-resourcemanager.pid file is empty before retry.
Starting nodemanagers
8.关闭Hadoop
运行命令:
$ stop-all.sh
可以登录http://localhost:9870,来查看hadoop是否已经在运行。
创建文件夹,列出文件
hadoop@qing-Inspiron-3437:~$ hdfs dfs -mkdir /zqh
hadoop@qing-Inspiron-3437:~$ hdfs dfs -ls /
上传,查看,下载文件
hdfs dfs -put doc_word.doc /zqh
hdfs dfs -cat /zqh/doc_word.doc
hdfs dfs -get /zqh/doc_word.doc ./
# pip install hdfs
from hdfs import Client
client = Client('http://localhost:9870', root='/')
print(client.list('/'))
print(client.list('/zqh'))
"""
如果遇到以下错误
hdfs.util.HdfsError: Permission denied: user=dr.who, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
修改配置文件
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
增加
dfs.permissions.enabled
false
重启hadoop
"""
client.makedirs('/test')
with client.read('zqh/doc_word.doc') as f_hdf:
print(f_hdf.read())
# 上传和下载文件
client.upload('hdfs_folder', 'local_file')
client.download('hdfs_file', 'local_folder')