Hadoop是一个由Apache基金会开发的开源框架,它允许跨多个机器使用分布式处理大数据集。Hadoop的核心是HDFS(Hadoop Distributed File System)和MapReduce编程模型。
在开始使用Hadoop之前,你需要搭建Hadoop环境。这通常包括安装Java、配置Hadoop环境变量、配置Hadoop的配置文件等步骤。
在开始安装Hadoop之前,你需要准备一个满足Hadoop运行要求的环境。以下是最低的配置要求:
访问Hadoop官网或使用wget命令下载最新版本的Hadoop。例如:
wget http://www.example.com/hadoop-2.7.7.tar.gz
将下载的Hadoop压缩包保存到你的服务器上。
解压下载的Hadoop压缩包到指定目录,例如:
tar -zxvf hadoop-2.7.7.tar.gz -C /opt/hadoop
这将把Hadoop解压到/opt/hadoop
目录。
编辑.bashrc
文件,加入Hadoop的环境变量,并使其立即生效:
nano ~/.bashrc
添加以下内容到文件末尾:
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后,使更改生效:
source ~/.bashrc
需要配置Hadoop的一些核心配置文件,这些文件位于$HADOOP_HOME/etc/hadoop/
目录下。
hadoop-env.sh
文件编辑hadoop-env.sh
文件,指定Java的安装路径:
nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
在文件中添加:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
core-site.xml
文件编辑core-site.xml
文件,指定HDFS的默认文件系统和临时文件存储目录:
fs.defaultFS
hdfs://localhost:9000
hadoop.tmp.dir
/opt/hadoop/tmp
hdfs-site.xml
文件编辑hdfs-site.xml
文件,配置文件的副本数和块的大小:
dfs.replication
1
启动Hadoop集群涉及到几个关键步骤,这些步骤确保了Hadoop的各个组件能够正常运行。以下是启动Hadoop集群的详细步骤:
在启动Hadoop集群之前,需要对HDFS进行格式化。这个步骤只需要执行一次,它会创建HDFS的命名空间和存储文件系统的元数据。
hdfs namenode -format
Hadoop集群由多个守护进程组成,包括NameNode、DataNode、ResourceManager、NodeManager等。以下是启动这些守护进程的命令:
# 启动HDFS守护进程
start-dfs.sh
# 启动YARN守护进程
start-yarn.sh
这些脚本会启动Hadoop的文件系统和资源管理器守护进程。在完全分布式配置中,你还需要启动其他守护进程,如SecondaryNameNode、ResourceManager等。
除了HDFS和YARN,Hadoop生态系统还包括其他服务,如HBase、Hive等。这些服务需要单独启动。
验证Hadoop是否安装成功,可以通过以下几种方式:
使用jps
命令查看Java进程,确认Hadoop的守护进程是否在运行:
jps
你应该会看到NameNode、DataNode、ResourceManager、NodeManager等进程。
使用hdfs dfsadmin -report
命令查看HDFS的健康状况和状态:
hdfs dfsadmin -report
这个命令会显示集群的总体状态,包括NameNode的信息、DataNode的数量和状态等。
Hadoop提供了Web界面来监控集群状态。默认情况下,NameNode和ResourceManager的Web UI分别运行在以下端口:
50070
8088
在浏览器中输入http://
和http://
,查看集群的实时状态和资源使用情况。
为了验证Hadoop是否完全安装成功,可以运行一个简单的MapReduce作业。Hadoop提供了一些示例程序,例如wordcount
。以下是运行wordcount
作业的命令:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount
将
替换为HDFS上的输入文件路径,
替换为输出结果的路径。如果作业成功运行,你可以在指定的输出路径查看结果文件。
如果遇到问题,查看Hadoop的日志文件也是一个好方法。日志文件通常位于$HADOOP_HOME/logs/
目录下。
Hadoop的日志文件通常位于Hadoop安装目录下的logs
子目录中。对于大多数安装,这个路径可能是:
$HADOOP_HOME/logs
这里$HADOOP_HOME
是Hadoop的安装目录,例如/opt/hadoop
。
你可以使用Linux系统的命令行工具来查看日志文件。以下是一些常用的命令:
cat
命令cat $HADOOP_HOME/logs/hadoop--.log
这里的
是运行Hadoop守护进程的用户名,
是守护进程的名称,如namenode
、datanode
、resourcemanager
等。
tail
命令如果你只对日志文件的最后几行感兴趣,可以使用tail
命令:
tail -n 20 $HADOOP_HOME/logs/hadoop--.log
这将显示日志文件的最后20行。
grep
命令如果你在寻找包含特定文本的日志条目,可以使用grep
命令:
grep "ERROR" $HADOOP_HOME/logs/hadoop--.log
这将显示所有包含“ERROR”文本的日志条目。
日志文件通常包含以下几个部分:
Hadoop生成多种类型的日志文件,包括:
对于MapReduce作业,Hadoop还会在HDFS上生成任务日志。这些日志文件位于作业的输出目录下,通常以stdout
和stderr
为文件名。你可以使用以下命令查看这些日志:
hdfs dfs -cat /path/to/job/output/stdout
hdfs dfs -cat /path/to/job/output/stderr
随着时间的推移,日志文件可能会占用大量的磁盘空间。你可以定期清理旧的日志文件,或者配置日志轮转策略来自动管理日志文件的大小和数量。
HDFS是Hadoop的分布式文件系统,以下是一些基本的HDFS操作命令:
hdfs dfsadmin -report
作用: 显示HDFS的总体状态和每个节点的状态。
hdfs dfs -mkdir /user/hadoop/hadoopdir
作用: 在HDFS上创建一个名为hadoopdir
的目录。
hdfs dfs -put localfile /user/hadoop/hadoopdir
作用: 将本地文件localfile
上传到HDFS的/user/hadoop/hadoopdir
目录。
hdfs dfs -cat /user/hadoop/hadoopdir/filename
作用: 显示HDFS上/user/hadoop/hadoopdir
目录下filename
文件的内容。
hdfs dfs -rm /user/hadoop/hadoopdir/filename
作用: 删除HDFS上的filename
文件。
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。它由Map任务和Reduce任务组成。
Map任务负责处理输入数据并产生中间键值对。
/ 定义一个Mapper类,继承自Mapper基类
public static class TokenizerMapper
extends Mapper
作用: 这个Mapper类会读取输入的文本行,然后对每一行进行分词,统计每个单词出现的次数。
Reduce任务负责接收Map任务输出的中间键值对,并进行汇总。
// 定义一个Reducer类,继承自Reducer基类
public static class IntSumReducer
extends Reducer {
// 定义一个IntWritable类型的变量,用于存储单词的总计数
private IntWritable result = new IntWritable();
// 定义reduce方法,它是Reducer类的核心方法,用于处理Mapper输出的数据
public void reduce(Text key, Iterable values,
Context context
) throws IOException, InterruptedException {
// 初始化计数器sum
int sum = 0;
// 遍历所有与当前key(单词)相关联的值(计数)
for (IntWritable val : values) {
// 将每个值加到sum中
sum += val.get();
}
// 将总计数设置到result变量中
result.set(sum);
// 将最终的单词计数输出到上下文context中,这样它们就可以被写入到最终的输出文件中
context.write(key, result);
}
}
作用: 这个Reducer类会接收每个单词的计数,然后计算总和,并输出每个单词的总出现次数。
hadoop jar wordcount.jar WordCount /user/hadoop/hadoopdir/input /user/hadoop/hadoopdir/output
作用: 运行名为wordcount.jar
的MapReduce作业,输入路径为/user/hadoop/hadoopdir/input
,输出路径为/user/hadoop/hadoopdir/output
。
HADOOP_HOME
环境变量已经设置,并且$HADOOP_HOME/etc/hadoop
目录下的配置文件已经正确配置。准备新节点环境:确保新节点的操作系统、Java环境和Hadoop版本与现有集群一致。
修改配置文件:
hdfs-site.xml
中添加新节点信息,例如:
dfs.hosts
$NODE_IP
其中$NODE_IP
是新节点的IP地址。slaves
文件中,该文件列出了所有的DataNode节点。启动Hadoop服务:在新节点上启动Hadoop服务并重启NameNode和DataNode。
ssh $NODE_IP "cd /path/to/hadoop && bin/hadoop-daemon.sh start datanode"
其中$NODE_IP
是新节点的IP地址。验证集群状态:确认新节点已经成功加入集群,可以通过访问Hadoop的Web UI界面或使用命令hdfs dfsadmin -report
来查看集群状态。
停止节点上的服务:在删除节点之前,需要先停止节点上运行的所有Hadoop服务。可以使用以下命令来停止服务:
hadoop-daemon.sh stop datanode
几分钟后,节点将从Decommissioned进入Dead状态。
从集群配置中删除节点:
hdfs-site.xml
中添加过滤配置,排除节点:
dfs.hosts.exclude
/your_path/excludes
在excludes
文件中添加要排除的节点主机名,一行一个。hdfs dfsadmin -refreshNodes
hdfs dfsadmin -report
通过命令也可以查看状态。更新节点文件:Hadoop使用一个节点文件来记录集群中所有的活动节点。在删除节点后,需要更新节点文件。节点文件通常位于/etc/hadoop/conf
目录下,文件名可能为slaves
或workers
。打开节点文件,删除包含要删除节点信息的行
以下是Hadoop生态系统中的一些关键组件及其用途和使用方法:
用途:
怎么用:
启动和停止HBase:
# 启动HBase
start-hbase.sh
# 停止HBase
stop-hbase.sh
HBase Shell命令:
hbase shell
create 'mytable', 'cf'
put 'mytable', 'row1', 'cf:qualifier1', 'value1'
get 'mytable', 'row1'
scan 'mytable'
用途:
怎么用:
启动Hive:l
# 进入Hive Shell
hive
HiveQL命令:
CREATE TABLE mytable (id INT, name STRING);
INSERT INTO mytable VALUES (1, 'John');
SELECT * FROM mytable;
用途:
怎么用:
pig
A = LOAD 'input_data' USING PigStorage() AS (name:chararray, age:int);
B = GROUP A BY name;
C = FOREACH B GENERATE group, COUNT(A.age) AS cnt;
DUMP C;
pig myscript.pig
这些组件的使用示例提供了基本的操作流程,帮助您快速上手Hadoop生态系统中的各个组件。
请注意,这份手册只是一个简单的入门指南,Hadoop的深入学习和使用需要更多的实践和探索。