大数据技术(实验)

    xiaoxiao2023-11-26  183

    实验一

    一、下载安装Vmware Workstation Pro 12

    二、安装CentOS

    点击【创建新的虚拟机】→ 【自定义安装】→ 【下一步】→ 【稍后安装操作系统(S)】→【Linux(L)】→  【输入虚拟机名称,选择安装位置】→ 【下一步】→ 【使用网络地址转换(NAT)(E)】→ 【LSI Logic(L)】点击【下一步】→ 【SCSI(S)】→ 【创建新虚拟磁盘】→ 【将虚拟磁盘拆分成多个文件(M)】→ 选择【自定义硬件】,点击【浏览】输入安装文件的路径 → 点击【完成】,开启虚拟机。然后选择虚拟机的语言,网络与主机名记录下来,设置登录密码,开始安装虚拟机。

    三、安装配置Hadoop

    1、开启虚拟机,首先关闭防火墙。将jdk和hadoop压缩包传入虚拟机,解压。

    2、配置jdk:

    vi /etc/profile文件添加:

    export JAVA_HOME=/opt/module/jdk1.8.0_121

    export PATH=$JAVA_HOME/bin:$PATH

    Esc :wq!保存并退出。不需要配置CLA:SSPATH。

    source /etc/profile配置生效

    运行命令javac,检验是否成功。

    3、配置HADOOP并生效

    vi /etc/profile文件添加:

    export HADOOP_HOME=/opt/module/hadoop-2.7.3

    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

    Esc :wq!保存并退出。

    source /etc/profile配置生效。

    4、Hadoop伪分布式

    修改配置文件:

    ①core-site.xml

    <!--配置HDFS主节点,namenode的地址,9000是RPC通信端口-->

    <property>

            <name>fs.defaultFS</name>

            <value>hdfs://bigdata128:9000</value>

    </property>

    <!--配置HDFS数据块和元数据保存的目录,一定要修改-->

    <property>

            <name>hadoop.tmp.dir</name>

            <value>/opt/module/hadoop-2.7.3/tmp</value>

    </property>

    ②core-site.xml

    <!--注释配置数据块的冗余度,默认是3-->  

    <property>  

         <name>dfs.replication</name>  

         <value>1</value>  

    </property>

    <!--secondaryNameNode的主机地址--> 

    <property>

             <name>dfs.namenode.secondary.http-address</name>

             <value>bigdata128:50090</value>

    </property>

    ③mapred-site.xml(该配置文件不存在,先复制)

    cp  mapred-site.xml.template  mapred-site.xml  

    <!--配置MR程序运行的框架-->  

    <property>  

      <name>mapreduce.framework.name</name>

      <value>yarn</value>

    </property>  

    ④yarn-site.xml

    <!--配置Yarn的节点-->  

    <property>  

      <name>yarn.resourcemanager.hostname</name>

      <value>bigdata128</value>

    </property>  

    <!--NodeManager执行MR任务的方式是Shuffle洗牌-->  

    <property>  

      <name>yarn.nodemanager.aux-services</name>

      <value>mapreduce_shuffle</value>

    </property>  

    ⑤Slaves文件里使用默认localhost,或者添加 bigdata128(既是NameNode又是DataNode)

    注:如果Slaves文件为空,就没有DataNode和NodeManager。

    ⑥修改\etc\hosts配置文件

    运行命令  vi  \etc  hosts

    注释掉已有内容,添加虚拟机的ip及对应主机名:

    192.168.163.128  bigdata128

    ⑦修改\etc\配置文件

    运行命令  vi  \etc  hostname

    添加虚拟机的主机名:

    bigdata128

    重启虚拟机,主机名生效。

    格式化:hdfs namenode -format

    启动名称节点和数据节点:start-all.sh

    访问50070和8088端口成功则伪分布式完成。

    5、完全分布式

    修改配置文件:

    ①slaves配置文件

    三台虚拟机分别都运行命令  vi  /opt/module/hadoop-2.7.3/etc/hadoop  slaves

    修改slaves为:

    bigdata129

    bigdata131

    ②修改\etc\hosts配置文件

    三台虚拟机分别都运行命令  vi  \etc  hosts

    注释已有内容,添加集群三台虚拟机的ip及对应主机名:

    192.168.163.128  bigdata128

    192.168.163.129  bigdata129

    192.168.163.131  bigdata131

    ③修改\etc\hostname配置文件

    三台虚拟机分别都运行命令  vi  \etc  hostname

    添加各自的主机名bigdata128或者bigdata129或者bigdata131。

    重启全部虚拟机,主机名生效。

    格式化:

    在主节点bigdata128上面输入格式化命令(hdfs namenode -format),格式化集群。

    注:如果不是第一次格式化,三台虚拟机都删除\opt\module\hadoop-2.7.3\下面的tmp、logs目录:rm –rf \opt\module\hadoop-2.7.3\tmp    rm –rf \opt\module\hadoop-2.7.3\logs

    注:如果格式化之前启动过集群,先在主节点bigdata128上面停止集群(stop-all.sh),再格式化。

    启动集群:

    在主节点bigdata128上面输入启动命令(start-all.sh),启动集群。

    访问50070和8088端口成功则伪分布式完成。

     

    实验二

    使用Hadoop和Java API实现文件的读写

    步骤:1.安装JDK→2.安装Eclipse→3.安装Maven→4. Eclipse里配置Maven (下载Windows版本,在Windows里安装使用。)

    1、新建HDFS目录/aadir,写入/上传 本地文件e:\\hdfs\\aa.txt 到HDFS的/aadir目录下,查看HDFS文件/bb.txt是否存在。

    package hdfs.files; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSMkdir{ private static InputStream input; private static OutputStream output; public static void main(String[] args) throws IOException{ System.setProperty("HADOOP_USER_NAME","root"); Configuration conf=new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.43.230:9000"); FileSystem client=FileSystem.get(conf); client.mkdirs(new Path("/aadir")); client.mkdirs(new Path("/bb.txt")); input = new FileInputStream("E:\\hdfs\\aa.txt"); output =client.create(new Path("/aadir/aaout.txt")); output =new FileOutputStream("E:\\hdfs\\bbout.txt"); input =client.open(new Path("/bb.txt")); byte[] buffer=new byte[1024];int len=0; while((len= input.read(buffer))!=-1) { output.write(buffer,0,len); } output.flush(); input.close(); output.close(); System.out.println("successfully!"); String fileName="/bb.txt"; if(client.exists(new Path(fileName))) { System.out.println("文件存在! "); } else { System.out.println("文件不存在! "); } } }

    2、读/下载 HDFS的根目录文件/bb.txt 到本地e:\\hdfs目录下。

    import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSDownload { private static InputStream input; private static OutputStream output; public static void main(String[] args) throws IOException{ System.setProperty("HADOOP_USER_NAME", "root"); Configuration conf=new Configuration(); conf.set("fs.defaultFS", "hdfs://bigdata128:9000"); FileSystem client=FileSystem.get(conf); output =new FileOutputStream("E:\\hdfs\\bbout.txt"); input =client.open(new Path("/bb.txt")); byte[] buffer=new byte[1024]; int len=0; while((len=input.read(buffer))!=-1) { output.write(buffer,0,len); } output.flush(); input.close(); output.close(); } }

     

    实验三

    启动自带MapReduce实例程序WordCount

    Map处理 :public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>

    Reduce处理: public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable>

    Job配置: public class WordCountDriver  //关联使用的Mapper类                   job.setMapperClass(WordCountMapper.class);  //关联使用的Reducer类

                     job.setReducerClass(WordCountReducer.class);

    public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ //对数据进行打散 protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { //输入数据 hello world love work String line = value.toString(); //对数据切分 String[] words=line.split(" "); //写出<hello, 1> for(String w:words) { //写出reducer端 context.write(new Text(w), new IntWritable(1)); }}} public class WordCountReducer extends Reducer <Text, IntWritable, Text, IntWritable>{ protected void reduce(Text Key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //记录出现的次数 int sum=0; //累加求和输出 for(IntWritable v:values) { sum +=v.get(); } context.write(Key, new IntWritable(sum)); } } public class WordCountDriver { public static void main(String[] args) throws IllegalArgumentException, IOException, ClassNotFoundException, InterruptedException { // 设置root权限 System.setProperty("HADOOP_USER_NAME", "root"); //创建job任务 Configuration conf=new Configuration(); Job job=Job.getInstance(conf); //指定jar包位置 job.setJarByClass(WordCountDriver.class); //关联使用的Mapper类 job.setMapperClass(WordCountMapper.class); //关联使用的Reducer类 job.setReducerClass(WordCountReducer.class); //设置Mapper阶段输出的数据类型 job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); //设置Reducer阶段输出的数据类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); //设置数据输入路径和文件名 FileInputFormat.setInputPaths(job, new Path("c:\\in\\aa.txt")); //设置数据输出路径 FileOutputFormat.setOutputPath(job, new Path("c:\\out")); //提交任务 Boolean rs=job.waitForCompletion(true); //退出 System.exit(rs?0:1); } }

    生成jar包之后,在虚拟机上运行。

     

    实验四

    安装并配置Hbase,使用Hbase的Java API实现简单的CRUD操作

    1.HBase安装配置

    ①下载压缩包(选择与自己安装的Hadoop版本的兼容版本,见后面附录)

    官网下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/stable/ 

    选择稳定版hbase-1.4.9-bin.tar.gz,在Windows里面下载。

    ②将压缩包从Windows传输到Linux当前目录下

    SecureCRT 【File】→【Connect SFTP Session】开启sftp操作

    ③安装

    解压安装到指定目录下/opt/module(/opt是系统自带目录,之下的/module是自己创建的)

    ④配置环境变量

    在/etc/profile文件里添加HBase安装路径的配置信息,之后用source命令使配置生效。

    2.HBase配置(伪分布式模式)

    配置文件位于HBase安装路径的conf目录(/opt/module/hbase/conf)下面

    ①配置hbase-env.sh

    设置Java安装路径 

    设置HBase的配置文件路径(/opt/module/hbase/conf)

    采用HBase自带Zookeeper,设置参数true

    ②配置hbase-site.xml

    <!--hbase共享目录,持久化hbase数据-->

    <!--配置为core-site.xml 中的fs.defaultFS -->

    <property>

            <name>hbase.rootdir</name>

            <value>hdfs://bigdata128:9000/hbase</value>

    </property>

    <!--分布式运行模式,false(默认)为单机模式-->

    <property>

            <name>hbase.cluster.distributed</name>

            <value>true</value>

    </property>

     

    <!--Zookeeper集群的地址列表,伪分布式用默认localhost-->

    <property>

            <name>hbase.zookeeper.quorum</name>

            <value>localhost</value>

    </property>

    ③启动并运行HBase(之前启动Hadoop)

    启动HBase,并jps查看。

    3.进入HBase数据库

    ①创建表

    ②添加数据

    ③查看数据

    ④删除数据

    ⑤删除表

     

    实验五

    安装Redis、MangoDB了解其基本操作

    1.下载安装redis

    下载:wget http://download.redis.io/releases/redis-5.0.4.tar.gz

    解压:tar -zxvf redis-5.0.4.tar.gz

    安装gcc使用make命令:make install安装redis

    启动redis:./redis-server

    2.redis连接配置redis.conf文件 1.cd ..(redis.conf文件默认在redis安装根目录下) 2.vi redis.conf

    [1] daemonize yes(no改为yes)

    [2]protected-mode no(yes改为no) 

    [3]requirepass foobared(将foobared改为自己的密码,并且删除前面”#“,例如:我的密码时“111111”} [4]bind 自己虚拟机的IP

     

    MongoDB下载安装:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/

     

    实验六

    安装配置Hive、MySQL以及JDBC驱动

    1.下载Hive,解压安装

    2.Hive配置环境变量

    export HIVE_HOME=/opt/module/apache-hive-3.1.1-bin export PATH=$PATH:$HIVE_HOME/bin12

    3.修改Hive的hive-env.sh文件

    export JAVA_HOME=/usr/java    ##Java路径 export HADOOP_HOME=/usr/local/hadoop   ##Hadoop安装路径 export HIVE_HOME=/usr/local/hive    ##Hive安装路径 export HIVE_CONF_DIR=/usr/local/hive/conf    ##Hive配置文件路径

    4.下载安装MySQL

    下载安装:

    wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm1 rpm -ivh mysql-community-release-el7-5.noarch.rpm1 yum install mysql-server1

    设置密码:

    mysql -u root1

    重启MySQL服务:

    service mysqld restart1

    5.配置JDBC驱动

    将MySQL的JDBC驱动 mysql-connector-java-5.1.43.jar添加到HIVE_HOME/lib 目录下。

    6.Hive Metastore配置

    6.1.创建数据库和用户

    假定你已经安装好 MySQL。下面创建一个 hive 数据库用来存储 Hive 元数据,且数据库访问的用户名和密码都为 hive。

    mysql> CREATE DATABASE hive;  mysql> USE hive;  mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive'; mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';  mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';  mysql> FLUSH PRIVILEGES;  mysql> quit;1234567

    6.2.修改hive-site.xml

    进入/opt/module/hive/conf目录,修改default.xml.template的文件名为hive-site.xml。(可以使用cp或者mv命令)

    cp hive- default.xml.template  hive-site.xml

    在最后添加以下属性:

    <property> <!-- 元数据库的链接地址 mysql --> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://bigdata131:3306/hivedb?createDatabaseIfNotExist=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <!-- 指定mysql驱动 --> <!-- mysql5的驱动是com.mysql.jdbc.Driver,mysql6以后的是com.mysql.cj.jdbc.Driver。 --> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <!-- 指定mysql用户名 --> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <description>username to use against metastore database</description> </property> <property> <!-- 指定mysql密码 请输入自己的MySQL连接密码 --> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>password to use against metastore database</description> </property> 注: 查看Hive建库、建表默认的hdfs目录为/user/hive/warehouse <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property>

    7.启动Hive

    ①启动Hadoop:start-all.sh

    ②初始化Metastore架构:schematool -dbType mysql -initSchema

    ③启动Hive:hive

    hive> 进入hive shell

    ④创建/删除/修改/查看 数据库、表、视图,向表中装载数据,查询数据等等。

    注:

    ①启动hive报错:Exception in thread "main" java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir}/${system:user.name},原因是hive-site.xml里的临时目录没有设置好。

    修改${system:Java.io.tmpdir}为自己创建的临时目录/opt/module/hive/tmp。

    <property> <name>Hive.exec.local.scratchdir</name> <value>${system:Java.io.tmpdir}/${system:user.name}</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>${system:java.io.tmpdir}/${hive.session.id}_resources</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <property> <name>hive.server2.logging.operation.log.location</name> <value>${system:java.io.tmpdir}/${system:user.name}/operation_logs</value> <description>Top level directory where operation logs are stored if logging functionality is enabled</description> </property> <property> <name>hive.querylog.location</name> <value>${system:java.io.tmpdir}/${system:user.name}</value> <description>Location of Hive run time structured log file</description> </property>

     

    实验七

    安装配置Spark以及Scala语言环境,分别使用Spark语言和Scala语言编写WordCount程序

    1.下载安装Scala

    下载后解压,在/etc/profile文件中加入安装路径:

    export SCALA_HOME=/usr/local/scala/scala-2.12.8 export PATH=$PATH:$SCALA_HOME/bin

    在每一个节点上都安装配置scalar,安装完后发送给slave1、slave2:  

    scp -r /usr/local/scala/scala-2.12.8 root @slave1:/usr/local/scala scp -r /usr/local/scala/scala-2.12.8 root @slave2:/usr/local/scala 

    2.下载安装Spark

    下载:http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz

     安装解压到以下路径

     /usr/local/spark

    编辑/etc/profile文件,增加:

    export SPARK_HOME=/usr/local/spark/spark-2.4.2-bin-hadoop2.7 export PATH=$PATH:$SPARK_HOME/bin

    生效:source /etc/profile

    2.修改spark-env.sh文件

    #Java环境变量 export JAVA_HOME=/opt/module/jdk1.8.0_121 #Scala环境变量 export SCALA_HOME=/usr/local/scala #Hadoop环境变量 export HADOOP_HOME=/opt/module/hadoop-2.7.3/      #定义管理端口 export SPARK_MASTER_WEBUI_PORT=8080 #定义master域名和端口 export SPARK_MASTER_HOST=spark-master export SPARK_MASTER_PORT=7077 #定义master的地址slave节点使用 export SPARK_MASTER_IP=spark-master #定义work节点的管理端口.work节点使用 export SPARK_WORKER_WEBUI_PORT=8080 #每个worker节点能够最大分配给exectors的内存大小  export SPARK_WORKER_MEMORY=1g

    3.新建slaves文件: 

    cp slaves.template slaves

     将slaves文件修改为:

    slaver1 slaver2

    配置完成,分发给其他节点,并且完成/etc/profile文件的配置 :

    scp -r /usr/local/spark/spark-2.4.2 root @slave1:/usr/local/spark scp -r /usr/local/spark/spark-2.4.2 root @slave2:/usr/local/spark

    启动spark:./sbin/start-all.sh

    4.执行 spark-shell

    4.1.加载本地文件(“file:///opt/module/code/wordcount/word.txt")centos7系统中必须存在该文件。

    scala>val textFile = sc.textFile("file:///opt/module/code/wordcount/word.txt") scala>textFile.first()

    4.2.读取hdfs中文件(/user/root/word.txt hdfs中必须存在,若不存在则手动创建)

    val textFile = sc.textFile("hdfs://bigdata128:9000/user/root/word.txt") textFile.first()

    4.3.词频统计:

    val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b) wordCount.collect()

    5.安装sbt打包:

    下载安装:https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo

    mv bintray-sbt-rpm.repo /etc/yum.repos.d/ yum install sbt

    6.运行sbt: 

    安装sbt成功:CTRL+C退出sbt 回到root目录,创建一个文件夹test

    创建WordCount.scala;

    创建word-count.sbt;

    执行打包;

    打开test02, part-00000文件即是程序的输出文件。

     


    最新回复(0)