实验一:在虚拟机安装CentOS ,安装配置Hadoop,实现伪分布式与分布式 Hadoop三种模式安装配置:
1.关闭防火墙 firewall-cmd --state 显示防火墙状态running/not running systemctl stop firewalld 临时关闭防火墙,每次开机重新开启防火墙 systemctl disable firewalld 禁止防火墙服务。 2.传输JDK和HADOOP压缩包 SecureCRT 【File】→【Connect SFTP Session】开启sftp操作 put jdk-8u121-linux-x64.tar.gz put hadoop-2.7.3.tar.gz 传输文件从本地当前路径(Windows)到当前路径(Linux) 3.解压JDK、HADOOP tar -zxvf jdk-8u121-linux-x64.tar.gz -C /opt/module 解压安装 tar -zxvf hadoop-2.7.3.tar.gz -C /opt/module 解压安装 4.配置JDK并生效 vi /etc/profile文件添加: export JAVA_HOME=/opt/module/jdk1.8.0_121 export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH Esc :wq!保存并退出。不需要配置CLASSPATH。 source /etc/profile配置生效 运行命令javac,检验是否成功。 5.配置HADOOP并生效 vi /etc/profile文件添加: export HADOOP_HOME=/opt/module/hadoop-2.7.3 export PATH= H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin:$PATH Esc :wq!保存并退出。 source /etc/profile配置生效 运行命令hadoop,检验是否成功。 Hadoop伪分布式模式配置: 1.修改配置文件: ①core-site.xml ②hdfs-site.xml ③mapred-site.xml(该配置文件不存在,先复制) ④yarn-site.xml ⑤Slaves文件里使用默认localhost,或者添加 bigdata128(既是NameNode又是DataNode) 注:如果Slaves文件为空,就没有DataNode和NodeManager。 ⑥修改\etc\hosts配置文件 运行命令 vi \etc hosts 注释掉已有内容,添加虚拟机的ip及对应主机名: 192.168.163.128 bigdata128 ⑦修改\etc\hostname配置文件 运行命令 vi \etc hostname 添加虚拟机的主机名: bigdata128 重启虚拟机,主机名生效。 2.格式化 hdfs namenode -format (如果不是第一次格式化,格式化之前先删除/opt/module/hadoop-2.7.3/下面的tmp、logs两个目录) 3.启动 start-all.sh (如果启动之前已经启动过,启动之前先停止stop-all.sh) 查看伪分布式配置是否成功: ①执行ll,查看/opt/module/hadoop-2.7.3/tmp/dfs目录,如下图所示,则正确。 ②执行jps,如下图所示,NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager如果全部启动,伪分布式配置成功。 ③web控制台访问:http://192.168.163.132:50070 、http://192.168.163.132:8088 页面正常显示,则成功。 4.运行wordcount hdfs dfs -put in.txt /adir 上传本地当前路径下的in.txt文件 到hdfs的/adir目录下。 运行hadoop jar hadoop-mapreduce-examples-2.7.3.jar wordcount /adir/in.txt output/。 在http://192.168.163.132:50070 查看/user/root/output/part-r-00000文件里的词频统计结果。 5.免密设置 生成公、私密钥对:ssh-keygen -t rsa 按3次回车键 查看:cd ~/.ssh路径下面的rd_rsa和rd_rsa.pub 复制:ssh-copy-id -i ~/.ssh/id_rsa.pub root@bigdata128 查看生成authorized_keys。
实验二:启动MapReduce示例程序WordCount Hadoop的生态集群: Ambair(安装 部署 配置 管理);Zookeeper(协作);HBbase(列式数据库);Hive(数据仓库);Pig(数据流);Mahout(数据挖掘);Flume(日志收集);MapReduce(分布式计算);HDFS(分布式文件系统)sqoop(ETL工具)
实验三:编写程序,利用Hadoop的Java API实现简单的文件系统编写功能 1.安装配置JDK ①官网下载Java开发工具安装包jdk-8u201-windows-x64.exe:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ②运行安装包,第一次选择JDK安装路径,第二次选择JRE安装路径,开始安装。 ③配置JDK的环境变量,Path添加JDK的\bin的安装路径,cmd命令行运行javac,查看是否成功安装配置。
2.安装Eclipse ①官网下载Eclipse安装包eclipse-inst-win64:https://www.eclipse.org/downloads/ ②运行安装包,选择Eclipse IDE for Java Developers,开始安装。过程可能较慢。
3.安装Maven ① Maven官网http://maven.apache.org/download.cgi,选择最近的镜像,选择Maven压缩包apache-maven-3.6.0-bin.tar.gz开始下载。 ②解压Maven压缩包apache-maven-3.6.0-bin.tar.gz,解压后的文件夹\apache-maven-3.6.0,将其考入自定义路径,如C:\eclipse\apache-maven-3.6.0。 ③配置Maven的环境变量,Path添加Maven的\bin的安装路径,cmd命令行运行mvn -v,查看是否成功安装配置。
4.Eclipse配置Maven ①修改settings.xml 在安装所在文件夹\apache-maven-3.6.0下面,新建\repository文件夹,作为Maven本地仓库。在文件settings.xml里添加 C:\eclipse\apache-maven-3.6.0\repository。 ②配置Maven的installation和User Settings 【Preferences】→【Maven】→【Installations】配置Maven安装路径,【User Settings】配置settings.xml的路径。 ③添加pom.xml依赖
实验四:编写程序,利用Hadoop的Java API实现启动自带MapReduce示例程序WordCount Linux的shell命令 Java程序: 1.新建HDFS目录: public class HDFSMKdir { public static void main(String[] args) throws IOException { //设置root权限 System.setProperty(“HADOOP_USER_NAME”, “root”); //创建HDFS连接对象client Configuration conf = new Configuration(); conf.set(“fs.defaultFS”, “hdfs://bigdata128:9000”); FileSystem client = FileSystem.get(conf); //在HDFS的根目录下创建aadir client.mkdirs(new Path("/aadir")); //关闭连接对象 client.close(); //输出"successful!" System.out.println(“successfully!”); } }
2.写入/上传 本地文件c:\hdfs\aa.txt 到HDFS的/aadir目录下 public class HDFSUpload { //声明输入流、输出流 private static InputStream input; private static OutputStream output;
public static void main(String[] args) throws IOException { //设置root权限 System.setProperty("HADOOP_USER_NAME", "root"); //创建HDFS连接对象client Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://bigdata128:9000"); FileSystem client = FileSystem.get(conf); //创建本地文件的输入流 input = new FileInputStream("D:\\aa.txt"); //创建HDFS的输出流 output = client.create(new Path("/aadir/aaout.txt")); //写文件到HDFS byte[] buffer = new byte[1024]; int len = 0; while ((len = input.read(buffer)) != -1) { output.write(buffer, 0, len); } //防止输出数据不完整 output.flush(); //使用工具类IOUtils上传或下载 //IOUtils.copy(input, output); //关闭输入输出流 input.close(); output.close(); System.out.println("成功!"); }} 3.HDFSDownload.java读/下载 HDFS的根目录文件/bb.txt 到本地c:\hdfs目录下 public class HDFSDownload { //声明输入流、输出流 private static InputStream input; private static OutputStream output;
public static void main(String[] args) throws IOException { //设置root权限 System.setProperty("HADOOP_USER_NAME", "root"); //创建HDFS连接对象client Configuration conf = new Configuration(); conf.set("fs.defaultFS", "hdfs://bigdata128:9000"); FileSystem client = FileSystem.get(conf); //创建本地文件的输出流 output = new FileOutputStream("d:\\bbout.txt"); //创建HDFS的输入流 input = client.open(new Path("/aadir/aaout.txt")); //写文件到HDFS byte[] buffer = new byte[1024]; int len = 0; while ((len = input.read(buffer)) != -1) { output.write(buffer, 0, len); } //防止输出数据不完整 output.flush(); //使用工具类IOUtils上传或下载 //IOUtils.copy(input, output); //关闭输入输出流 input.close(); output.close(); System.out.println("成功!"); }} 4.HDFSFileIfExist.java查看HDFS文件/bb.txt是否存在 public class HDFSFileIfExist { public static void main(String[] args) throws IOException { //设置root权限 System.setProperty(“HADOOP_USER_NAME”, “root”); //创建HDFS连接对象client Configuration conf = new Configuration(); conf.set(“fs.defaultFS”, “hdfs://bigdata128:9000”); FileSystem client = FileSystem.get(conf); //声明文件对象 String fileName = “/aadir/aaout.txt”; //判断文件是否存在 if (client.exists(new Path(fileName))) { System.out.println(“文件存在!”); } else { System.out.println(“文件不存在!”); } } }
常用的linux的shell命令: cd /aa 转到/aa目录 pws 显示当前目录 ll /aa 显示/aa目录 mkdir /aa 新建/aa目录 rm /aa/out.txt 删除/aa目录下的out.txt文件 cat /aa/out.txt 查看/aa目录下的out.txt文件的内容 vi /aa/out.txt 编辑/aa目录下的out.txt文件的内容 ifconfig 查看IP地址 ip addr 查看IP地址 hdfs的shell命令 hdfs的shell命令,有三种形式,用前面两个。 hdfs dfs √ hadoop fs √ hadoop dfs × 常用的hdfs的shell命令: hdfs dfs -ls / 查看hdfs根目录下文件和目录 hdfs dfs -ls -R / 查看hdfs根目录下包括子目录在内的所有文件和目录 hdfs dfs -mkdir /aa/bb 在hdfs的/aa目录下新建/bb目录 hdfs dfs -rm -r /aa/bb 删除hdfs的/aa目录下的/bb目录 hdfs dfs -rm /aa/out.txt 删除hdfs的/aa目录下的out.txt文件
hdfs dfs -put anaconda-ks.cfg /aa 把本地文件上传到hdfs hdfs dfs -copyFromLocal a.txt / 把本地文件上传到hdfs hdfs dfs -get /bb.txt bbcopy.txt 从hdfs下载文件到本地 hdfs dfs -copyToLocal /bb.txt bbcopy.txt 从hdfs下载文件到本地
实验五:安装并配置HBase,编写程序,利用HBase的Java API实现简单的CRUD操作 HBase配置: ①配置hbase-env.sh 设置Java安装路径
设置HBase的配置文件路径(/opt/module/hbase/conf)
采用HBase自带Zookeeper,设置参数true
②配置hbase-site.xml
hbase.rootdir hdfs://bigdata128:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum localhost ③启动并运行HBase(之前启动Hadoop) 启动HBase,并jps查看 用完停止HBase运行(之后停止Hadoop)实验六:安装Redis,MongoDB,做基本了解 Redis: 下载及安装:https://redis.io/download MongoDB: 文档:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
实验七:安装并配置Hive,MySQL及其JDBC驱动,编写HiveSQL语句实现简单的CRUD操作 Hive: 下载:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-2.3.4/apache-hive-2.3.4-bin.tar.gz 文档:https://cwiki.apache.org/confluence/display/Hive/GettingStarted 配置Hive: 先在 hive 主目录下新建名为 iotmp 和 tmp 的文件夹 1.配置 hive-env.sh 2.配置 hive-site.xml 3.参数配置 编写HiveQL语句实现WordCount程序: 1.把需要统计的文件传到HDFS上: vim 1.txt hdfs dfs -mkdir /input hdfs dfs -put 1.txt /input hdfs dfs -ls /input 2.创建表words: create table words(line string); 3.导入内容: load data inpath ‘/input/1.txt’ overwrite into table words; 4.执行WordCount,将结果保存到新表wordcount中: create table wordcount as select word, count(1) as count from (select explode(split(line,’ '))as word from words) w group by word order by word; 5.查看统计结果: select * from wordcount; MySQL: 下载(这个下的是MySQL的Yum Repository):https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm 安装与配置:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
实验八:安装并配置Spark及Scala语言环境,熟悉Spark Shell,并分别使用Scala语言和Spark语言编写WordCount并执行 Spark: 下载:https://www.apache.org/dyn/closer.lua/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz 文档:http://spark.apache.org/docs/latest/ 修改配置文件后进入Spark的sbin目录启动spark: ./start-all.sh 启动 Spark Shell : ./bin/spark-shell Scala: 下载:https://downloads.lightbend.com/scala/2.12.8/scala-2.12.8.rpm WordCount: 1、在 Spark Shell 使用本地文件进行统计 2、在 CentOS中 编写 WordCount 程序,在 Spark Shell 中执行程序 3、编写 Java 版的 WordCount 程序并执行: import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; import scala.Tuple2;
import java.util.Arrays;
public class JavaWordCount { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName(“Spark WordCount written by java!”);
JavaSparkContext sc = new JavaSparkContext(conf); // 在这里指定 hdfs 中的 待统计文件目录 JavaRDD<String> textFile = sc.textFile("hdfs:///dit/1.txt"); JavaPairRDD<String, Integer> counts = textFile .flatMap(s -> Arrays.asList(s.split(" ")).iterator()) .mapToPair(word -> new Tuple2<>(word, 1)) .reduceByKey((a, b) -> a + b); // 在这里指定输出结果存储位置 counts.saveAsTextFile("hdfs:///dit/result"); sc.close(); }} pom.xml:
<?xml version="1.0" encoding="UTF-8"?>4.0.0
<groupId>wang.oo0oo</groupId> <artifactId>sparktest</artifactId> <version>1.0</version> <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>2.4.3</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>JavaWordCount</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </pluginManagement> </build> 打包后上传到 CentOS 中,执行以下命令: ./bin/spark-submit --class JavaWordCount --master spark://bigdata:7077 /usr/local/spark/mycode/sparktest-1.0.jar