Hadoop是一個分布式計算平台,不但支持海量數據的存儲,同時也提供了可靠的分布式數據處理機制,處理過程被優化為在大量廉價的硬件上擴展。
一、Hadoop環境搭建
為了使用Hadoop,我們需要完成Hadoop的環境搭建,在這裡介紹如何搭建Hadoop 2.7.2的環境,詳細步驟如下:
1. 安裝Java並設置環境變量
cd /opt
tar -zxvf jdk-8u131-linux-x64.tar.gz
vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
2. 安裝hadoop
cd /opt
tar -zxvf hadoop-2.7.2.tar.gz
vim /etc/profile
export HADOOP_HOME=/opt/hadoop-2.7.2
export PATH=${HADOOP_HOME}/bin:${PATH}
source /etc/profile
3. 修改hadoop配置文件
cd /opt/hadoop-2.7.2/etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_131
export HADOOP_HOME=/opt/hadoop-2.7.2
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_PREFIX=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
4. 啟動Hadoop集群
cd ${HADOOP_HOME}/sbin
./start-dfs.sh
./start-yarn.sh
二、HDFS的使用
在Hadoop中,HDFS將數據拆分成多個塊,分布式存儲到不同節點上,為了讓大文件能夠並行處理,HDFS使用了塊的概念,一個塊可以理解為是一個文件的一部分。
1. HDFS基礎操作
# 創建目錄
hdfs dfs -mkdir /input
# 在本地創建文件
echo "hello hadoop" > test
# 上傳文件到HDFS
hdfs dfs -put test /input
# 查看上傳到HDFS的文件
hdfs dfs -ls /input
# 下載文件到本地
hdfs dfs -get /input/test test2
# 刪除HDFS上的文件
hdfs dfs -rm /input/test
# 查看HDFS上文件內容
hdfs dfs -cat /input/test2
2. HDFS讀寫文件
下面是使用Java API讀寫HDFS文件的示例代碼:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import java.io.InputStream;
import java.net.URI;
public class HdfsDemo {
private static final String HDFS_PATH = "hdfs://localhost:9000";
private static final Configuration CONF = new Configuration();
public static void main(String[] args) throws Exception {
URI uri = new URI(HDFS_PATH);
FileSystem fs = FileSystem.get(uri, CONF);
// 寫入文件
String content = "Hello HDFS!";
byte[] buff = content.getBytes("UTF-8");
InputStream in = new ByteArrayInputStream(buff);
fs.create(new Path("/test.txt"));
IOUtils.copyBytes(in, out, 4096, true);
// 讀取文件
InputStream in = fs.open(new Path("/test.txt"));
IOUtils.copyBytes(in, System.out, 4096, false);
fs.close();
}
}
三、MapReduce的使用
MapReduce是Hadoop提供的用於大規模數據處理的編程模型,用戶可以編寫Map和Reduce函數,讓Hadoop分發數據,執行Map任務,然後收集結果,執行Reduce任務,最終將結果返回。
1. MapReduce基礎操作
下面是使用命令行執行MapReduce任務的示例命令:
# 創建輸入目錄並上傳數據
hadoop fs -mkdir /input
hadoop fs -put /usr/local/hadoop/LICENSE.txt /input
# 執行MapReduce任務
hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
# 查看輸出結果
hadoop fs -cat /output/part-r-00000
2. MapReduce自定義函數
下面是編寫自定義Map函數的Java代碼:
public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
下面是編寫自定義Reduce函數的Java代碼:
public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
下面是編寫Driver程序來運行自定義MapReduce任務的Java代碼:
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
四、Hadoop集群管理
在Hadoop中,集群管理分為兩個部分:節點管理和作業管理。節點管理是指監控集群中的每個節點,確保它們正常工作。作業管理是指確保MapReduce作業正確提交和管理,監控作業的進度,以及保證數據在節點之間的正確移動。
1. 節點管理
下面是使用命令行監控Hadoop集群節點狀態的示例命令:
$HADOOP_HOME/bin/hdfs dfsadmin -report
2. 作業管理
下面是使用命令行提交MapReduce作業的示例命令:
$HADOOP_HOME/bin/hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
下面是使用瀏覽器查看作業運行狀態的示例地址:
http://localhost:8088/cluster
五、總結
Hadoop菜鳥教程介紹了Hadoop的環境搭建、HDFS的使用、MapReduce的使用和Hadoop集群管理等方面的內容,這些內容可以幫助初學者快速了解和學習Hadoop的基礎知識。
原創文章,作者:PZELE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332260.html