虚拟机上进行Hadoop伪分布式部署并进行大数据处理_基于virtualbox虚拟机部署伪分布式hadoop环境(2)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

修改为:

ssh localhost

输入yes,然后乱输,一直结束,然后直接往下操作,别管他的报错。

cd ~/.ssh/
ssh-keygen -t rsa

一直回车

cat ./id_rsa.pub >> ./authorized_keys

4:输入ifconfig,查看ens33的inet为多少,然后用xshell去连接,这里我的是192.168.200.129

5:在xshell新建会话

6:输入虚拟机的ip地址

7:双击master

8:因为虚拟机信息就用的master

这里的密码是自己虚拟机的密码

这样就连接上自己的虚拟机了

JAVA环境安装

1:在https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html下载

2:在hadoop官网下载hadoop-2.7.7

3:在Ubuntu命令行中安装sz命令与rz命令(记得在xshell中使用sudo su到root用户)

apt-get install lrzsz

4:

cd /home/master/
mkdir bighomework
cd bighomework

5:从windows上传文件到Ubuntu上面

rz

6:解压这两个文件:

tar -zxvf jdk-8u371-linux-x64.tar.gz
tar -zxvf hadoop-2.7.7.tar.gz

7: 配置环境变量

cd /etc
vim profile

在文件中输入(注意这个master路径是不是自己虚拟机的,不要直接粘了就不管了)

export JAVA_HOME=/home/master/bighomework/jdk1.8.0_371
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export HADOOP_HOME=/home/master/bighomework/hadoop-2.7.7
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

保存文件并退出

执行

source profile

java -version
hadoop version

可以看到

配置hadoop-env.sh

cd /home/master/bighomework/hadoop-2.7.7/etc/hadoop
vim hadoop-env.sh

输入

export JAVA_HOME=/home/master/bighomework/jdk1.8.0_371
export HADOOP_HOME=/home/master/bighomework/hadoop-2.7.7

配置core-site.xml

vim core-site.xml
cd /home/master/bighomework/hadoop-2.7.7
mkdir tmp
cd /home/master/bighomework/hadoop-2.7.7/etc/hadoop
vim core-site.xml

输入

  <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/master/bighomework/hadoop-2.7.7/tmp</value>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://localhost:9000</value>
    </property>

配置hdfs-site.xml

vim hdfs-site.xml
<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
<property>
		<name>dfs.namenode.name.dir</name>
		<value>/home/master/hadoop-2.7.7/tmp/dfs/name</value>
</property>
<property>
		<name>dfs.datanode.data.dir</name>        
		<value>/home/master/hadoop-2.7.7/tmp/dfs/data</value>
</property>

cd /home/master/bighomework/hadoop-2.7.7/tmp
mkdir dfs
cd dfs
mkdir name
mkdir data

启动hadoop集群节点

hdfs namenode -format
cd /home/master/bighomework/hadoop-2.7.7/sbin
start-dfs.sh 

等待结束(可能会暂停输入yes)

jps

可以看到DataNode与NameNode与SecondaryNameNode启动成功

cd /home/master/bighomework/hadoop-2.7.7/etc/hadoop
vim yarn-site.xml

输入

<property>  
		<name>yarn.nodemanager.aux-services </name>  
		<value>mapreduce_shuffle</value>  
</property>

vim mapred-site.xml.template 

输入

<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

cd /home/master/bighomework/hadoop-2.7.7/sbin
start-all.sh

等待运行结束

jps

可以发现六个东西都出来了

数据处理:

1:这是一个乱码csv

2:将该csv以txt文本形式打开

3:txt是不乱码的

4:点击文件的另存为

5:选择带有BOM的UTF-8进行保存(也可以ANSI,只是不知道后面的idea代码会不会识别ANSI格式文字不乱码)

  6:csv正常显示

处理好文件后将文件上传到bighomework文件夹下,再创建一个project(后面用)

hadoop dfs -put data.csv /
hadoop dfs -ls /

文件已上传上去

下载idea编译器

在VMware虚拟机的火狐浏览器中输入idea

点击下载后,下拉页面并下载社区版的idea,这是一个tar.gz,按照前面的解压缩命令可以执行安装。

下载完后进入xshell输入

cd /home/master/Downloads

默认的Ubuntu下载都在这个文件夹下

tar -zxvf ideaIC-2023.1.3.tar.gz

但凡下载的东西都在在Downloads下面运行

在VMware虚拟机打开Open in Terminal

sudo su
cd ~/Downloads/idea-IC-231.9161.38/bin
./idea.sh

于是打开了idea,开始点击New Project,创建一个Maven工程文件,我将工程文件放在了

/home/master/bighomework/project下面

JDK路径为下载的安装包

在Pom.xml文件中添加

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <spark.version>3.1.2</spark.version>
        <scala.version>2.12</scala.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.hadoop</groupId>
                    <artifactId>hadoop-hdfs-client</artifactId>
                </exclusion>
            </exclusions>
            <!--      <scope>provided</scope>   -->
        </dependency>
		 <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.7.7</version>
        </dependency>
		</dependencies>

点击右侧Maven,并点击这个圈圈进行更新。

在Main类中代码改为如下(注意爆红的类引入类,之前Pom已经把这些类下好了),通过Spark读取之前上传的csv的文件:

public class Main {
    public static void main(String[] args) {
        SparkConf sparkConf = new SparkConf()
                .setAppName("testsparkjava").setMaster("local");
        SparkContext sparkContext = new SparkContext(sparkConf);
        RDD<String> rdd = sparkContext.textFile("hdfs://localhost:9000/data.csv",
                1);
        System.out.println(rdd.first());
    }
}

执行结果如下:

mysql配置:

1:打开Open in Terminal

2:

sudo su
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
mysql
SHOW VARIABLES LIKE 'validate_password%';

Mysql命令一定是以冒号结尾的

这里修改密码长度的8为6,方便设置密码为123456,将密码的规则设置为最低级;

set global validate_password.policy=0;
set global validate_password.length=6;

修改成功:

3:开始给所有用户赋予访问权限:

create user 'root'@'%' identified by '123456’;
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
flush privileges;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
exit

exit回到主命令行,不是mysql里面了。

4:

sudo mysql_secure_installation

填入密码

Do you wish to continue with the password provided? 填y
Remove anonymous users?填n
Disallow root login remotely?填n
Remove test database and access to it? 填n
Reload privilege tables now? (Press y|Y for Yes, any other key for No) 填n

5:之后登录mysql使用命令

mysql -u root –p

然后键入自己的密码(第6步,我设的是123456)

6:进入mysql后,

show  databases;

7:开始创建自己的数据库和表:

create database hotel;

use hotel;
create table room (province varchar(60),rooms varchar(16));
ALTER TABLE room CONVERT TO CHARACTER SET utf8mb4;
insert into room(province,rooms) values("四川","20");
select * from room;

此时mysql已经配置好了。

idea测试mysql能否使用

1:检查自己mysql的版本mysql –V,我的是8.0.33,然后进入Maven Repository: mysql » mysql-connector-java (mvnrepository.com)")搜索Maven中对应版本的connector连接器。

2:打开VMware虚拟机的idea工程文件,并导入该段代码到Pom.xml

一开始可能导不进去,下面命令行会有蓝色报错force import开始强制导入,点一下,多试试,会成功的。

3:在Main类里面写下下面代码,目的是向mysql表插入"sichuan",“20”,注意String driver可能不一样,mysql5.x与mysql8.x不一样,我的是8.x的,所以有cj

package不要复制,看看自己的工程的package,保留它。

package org.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.concurrent.locks.ReentrantReadWriteLock;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        insertData("room","sichuan","20");
    }
    public static void insertData(String tableName, String data1, String data2) throws ClassNotFoundException, SQLException {
        String driver = "com.mysql.cj.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/hotel?useUnicode=true&characterEncoding=utf8";
        String user = "root";
        String password = "123456";
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url, user, password);
        PreparedStatement preparedStatement;
        String sql = "insert into " + tableName + " values (?,?)";
        preparedStatement =connection.prepareStatement(sql);
        preparedStatement.setString(1,data1);
        preparedStatement.setString(2,data2);
        preparedStatement.executeUpdate();
        System.out.println("churuchenggong");
    }
}

4:查询结果

证明mysql数据库可以在idea中调用并使用。

Pycharm安装

1:下载Pycharm,并创建工程,同idea的下载方式。

社区版足矣

2:解压并安装,默认路径都是Downloads,跟idea在一块

cd /home/master/Downloads
tar -zxvf pycharm-community-2023.1.2.tar.gz

3:进入pycharm的bin文件夹,并启动pycharm

cd /home/master/Downloads/pycharm-community-2023.1.2/bin
./pycharm.sh

与idea的工程文件同文件夹下再创建一个pycharmproject,作为python工程的使用空间。

4:点击create,等待pycharm自动配置完成。(虚拟机太卡就看引言部分,文章最上面)

pycharm有自带的python3.8的解释器,所以可以直接执行,到此pycharm配置好了

最后就是利用idea编写Spark调用RDD的代码来处理大数据存到mysql数据库,并用pycharm做可视化的操作。

大数据Spark代码合集+讲解(重点)都在自己的Main类操作,package填自己的Main类所在目录。

data.csv

一:

package org.example;
import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.rdd.RDD;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args) {
        SparkConf sparkConf = new SparkConf().setAppName("testsparkjava").setMaster("local");
        SparkContext sparkContext = new SparkContext(sparkConf);
        RDD<String> rdd = sparkContext.textFile("hdfs://localhost:9000/data.csv",1);
        System.out.println(rdd.first());  //读取csv第一行的数据
        System.out.println(rdd.toJavaRDD().count());//读取csv非空的行总数
    }
}

1:SparkConf 是 Spark 的配置类,想用Spark都需要有它,相当于汽车发动机,不然开不了车。(心脏)

setAppName是给这个Spark取个名,setMaster(“local”)是程序执行只调用一个线程,可以local[4]配置4个线程,加快程序执行速度,但是电脑受不受得了就不知道了。

2:new SparkContext是创建一个SparkContext对象,其核心作用是初始化 Spark 应用程序运行所需要的核心组件,相当于调用汽车各个部件,各个部件在一起才能组装成车。(四肢)

3:sparkContext.textFile是按行读取文件,一行一行的数据。后面的"hdfs://localhost:9000/data.csv"是刚才上传的data.csv在hadoop上的路径,后面的1是给给这个rdd分配1个块,一个块128M,相当于给RDD一个住的地方,不然无家可归就找不到它了,也可以多分几个块,相当于住在了连栋别墅。

RDD是一个String类型的RDD。

4:两个System.out.println的代码后面都有解释。

执行效果如下:

第一行数据显示出来了:

csv表总共3197行也被统计出来了,其实rdd.count()也能输出3197。toJavaRDD有时候可以不用加。

3198为空,所以不统计。

二、

package org.example;
import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.function.Function2;
import org.apache.spark.api.java.function.PairFunction;
import org.apache.spark.rdd.RDD;
import scala.Tuple2;

// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`,
// then press Enter. You can now see whitespace characters in your code.
public class Main {
    public static void main(String[] args) {
        SparkConf sparkConf = new SparkConf().setAppName("testsparkjava").setMaster("local");
        SparkContext sparkContext = new SparkContext(sparkConf);
        RDD<String> rdd = sparkContext.textFile("hdfs://localhost:9000/data.csv",1);

        //统计各省份宾馆数量
        JavaPairRDD<String, Integer> rdd1 = rdd.toJavaRDD().mapToPair(new PairFunction<String,String,Integer>() {
            @Override
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2(s.split(",")[3],1);
            }
        });
//
        JavaPairRDD<String,Integer> rdd2 = rdd1.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer aDouble, Integer aDouble2) throws Exception {
                return aDouble + aDouble2;
            }
        });
        System.out.println(rdd2.collect());
    }
}

核心代码讲解:


        //统计各省份宾馆数量
        JavaPairRDD<String, Integer> rdd1 = rdd.toJavaRDD().mapToPair(new PairFunction<String,String,Integer>() {
            @Override


![img](https://img-blog.csdnimg.cn/img_convert/c320ae86b73536f4ac74fbd1c706bb61.png)
![img](https://img-blog.csdnimg.cn/img_convert/cad47033022a551bf67f55824a7d88c2.png)
![img](https://img-blog.csdnimg.cn/img_convert/f3b0602dc72ab5b02c837863cd3939a9.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

aRDD().mapToPair(new PairFunction<String,String,Integer>() {
            @Override
            public Tuple2<String, Integer> call(String s) throws Exception {
                return new Tuple2(s.split(",")[3],1);
            }
        });
//
        JavaPairRDD<String,Integer> rdd2 = rdd1.reduceByKey(new Function2<Integer, Integer, Integer>() {
            @Override
            public Integer call(Integer aDouble, Integer aDouble2) throws Exception {
                return aDouble + aDouble2;
            }
        });
        System.out.println(rdd2.collect());
    }
}

核心代码讲解:


        //统计各省份宾馆数量
        JavaPairRDD<String, Integer> rdd1 = rdd.toJavaRDD().mapToPair(new PairFunction<String,String,Integer>() {
            @Override


[外链图片转存中...(img-nDu6Cmwn-1715833404857)]
[外链图片转存中...(img-pTW8ZhjU-1715833404857)]
[外链图片转存中...(img-Uf6G8Z30-1715833404857)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值