MBTI(迈尔斯布里格斯类型指标)

最近刷知乎,不时看到关于intp,intj人格的问题. 刚开始看到的时候感觉这和星座差不多,模棱两可,真正发现内心的自己确实有点难度。

我还是把这几种人格的表格列一下吧,权当故事看.(表格来源 百度百科)

今天又刷到一则学生跳楼的新闻,也许有时候把人分为不同的性格,以相应的方式分别对待会好点吧,人就是这么脆弱.

以前以为人可以掌控自己的性格,自己的情绪,现在也同样如此.但是真正到自己面临时,却又很难走出来.

R语言基础语法

R语言数据结构包含:

向量(vector), 矩阵(matrix), 数组(array), 数据框(data frame), 列表(list). [索引从1开始]

基本向量类型

六种:逻辑型(logical),整数型(integer), 实数型(double),复数型(complex),字符型(string//character), 字节型(raw).可以通过typeof(),mode(),storage.mode()查看其向量的类型

只含有一个元素的向量是标量(标量只有大小没有方向,矢量既有大小又有方向)

  
 R

SQL Server

候选码: 该属性或者属性组可以唯一的标识一个元组,而其子集不能

主码: 若一个关系有多个候选码,则选定其中一个作为主码

全码: 若此关系中,候选码的组成为该关系元组的全集,则称其为全码

外键: 表的外键为另一个表的主键,外键可以重复 ||为空值

主码: 保证数据完整性

外键: 和其它表建立联系

索引: 提高查询排序速度


1
2
3
4
建立索引: CREATE [UNIQUE] [CLUSTER] INDEX<索引名> ON <表名> (<列名> [<次序>] [,<列名>[<次序>]]....)  # UNIQUE 此索引的每一个索引值只对应唯一的数据记录
# CLUSTER 建立的索引是聚簇索引
删除索引: DROP INDEX <索引名> ON <表名>
修改索引: ALTER INDEX <旧索引名> RENAME TO <新索引名>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
GO是批处理的标志,是一条或多条SQL语句的集合,SQL Server将批处理语句编译成一个可执行单元,此单元称为执行计划。
GO语句把程序分成一个个代码块,即使一个代码块执行错误,它后面的代码块任然会执行。
每个被GO分隔的语句都是独立的事务,一个语句执行失败不会影响其它语句执行:

go
select * from dbo.XXX
go
select * from dbo.sales
第一个查询失败了,第二查询的结果依旧会返回
也就是说,go前面失败的语句,不影响后面语句的执行。也可以

go N
select * from dbo.sales
N是常数,代表以下语句重复执行N次

1
2
3
4
5
6
7
8
9
10
modify alter不同
modify:只能修改字段的属性。

alter:除了修改字段属性外,还可以做增加删除操作。

二、语法不同

1、modify:修改字段名使用:ALTER TABLE [表名] MODIFY [列名] [数据类型]

2、alter:数据库SQL语言的修改语句,可以用来修改基本表,表示格式为:ALTER TABLE<表名>[改变方式]。
1
2
3
关系模式: 对关系的描述. R(U,D,dom,F)
#R关系名, U组成该关系的属性名集合,D属性组U中属性来自的域,dom属性向域的映象集合,F属性间的依赖关系集合,简记为 R(U)
E-R模型(entity-relationship model),构成成分是实体集,
  
 SQL

Gitbash_乱码记

更换电脑,重装hexo时,gitbash输出乱码.

系统字符集编码与Gitbash字符集编码不一致,解决方法打开win10语言设置,依次点击下图选项,更改为UTF-8编码,重启电脑即可解决.[吐了,其他软件又乱码了]

常用设计模式

软件设计的六大原则SOLID:

  • 单一职责:一个类应该只负责一个方面的任务,如果一个类承担了过多的任务,修改其中一部分可能会影响到其它类的功能。
  • 开闭原则:对修改关闭,对扩展开放,类、模块、函数等应该可以在已有代码不被修改的情况下增添新功能。
  • 依赖倒置:鼓励创建抽象类或接口,通过依赖注入的方式,让具体实现类依赖于这些抽象类
  • 接口隔离:将大的接口分成更小更具体的接口,让类只需要关心他们真正需要的接口。
  • 里氏替换:子类对象应该能够替换其父类对象,而不破坏程序的正确性。换句话说,这意味着子类应当遵循父类的行为约定,父类定义的行为在子类中依然成立。
  • 组合优于继承:可以通过包含其它对象来扩展类的行为,通过对象的组合来获得更灵活的代码重用机制,避免继承带来的紧密耦合问题。

常用的设计模式:

工厂模式:旨在将对象的创建过程从其使用过程中分离出来,以提高系统的灵活性和可维护性。在这种模式下,客户端代码不直接实例化具体产品类。相反,它通过使用一个共同的工厂接口,依赖于工厂类来创建具体产品的实例。这种方式允许客户端代码在不知道具体产品类细节的情况下工作,从而使系统更容易扩展和维护。举一个类比,这就像在餐厅点餐时,你不需要知道食物是如何准备的,你只需要从菜单中选择你想要的食物,并等待厨房准备好送到你的桌上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Chart:
def draw(self):
raise NotImplementedError("This method should be overridden by subclasses.")

class ScatterChart(Chart):
def draw(self):
return "Drawing ScatterChart."

class LineChart(Chart):
def draw(self):
return "Drawing LineChart."

class BarChart(Chart):
def draw(self):
return "Drawing BarChart."

class ChartFactory:
def create_chart(self, data_type, data_size, user_preference):
if data_type == 'continuous':
if data_size > 1000:
return ScatterChart()
else:
return LineChart()
elif data_type == 'categorical':
if user_preference == 'detail':
return BarChart()
else:
return LineChart()
# Add more logic as needed
else:
raise ValueError("Unsupported data type or preferences")

# Client code
factory = ChartFactory()
chart = factory.create_chart('continuous', 1200, None)
print(chart.draw())

策略模式:是一种行为模式,它主要关注对象的行为和算法的选择。这个模式允许开发者定义一系列的算法,把它们封装在独立的策略类中,并在运行时确定使用哪一个算法。这样,这种模式使得客户端可以在不同算法间切换,而无需关心算法的具体实现细节。客户端的选择通常基于运行时的条件或者需求变更,而策略模式使得这种选择变得灵活和可扩展。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
from abc import ABC, abstractmethod

# 定义策略接口
class RenderStrategy(ABC):
@abstractmethod
def render(self, text):
pass

# 实现文本渲染策略
class TextRenderStrategy(RenderStrategy):
def render(self, text):
return text

# 实现Markdown渲染策略
class MarkdownRenderStrategy(RenderStrategy):
def render(self, text):
return f"**{text}**" # 假设简单地将文本加粗表示Markdown渲染

# 上下文,用于使用策略
class ContentRenderer:
def __init__(self, strategy: RenderStrategy):
self.strategy = strategy

def render(self, text):
return self.strategy.render(text)

# 在运行时根据条件选择策略
if __name__ == "__main__":
# 假设这是根据用户输入或其他条件动态决定的
user_preference = "markdown"

if user_preference == "text":
strategy = TextRenderStrategy()
elif user_preference == "markdown":
strategy = MarkdownRenderStrategy()

renderer = ContentRenderer(strategy)
print(renderer.render("Hello, Strategy Pattern!"))

观察者模式:是一种行为模式,允许观察者对象监听某个被观察者对象的状态变化,当被观察者对象的状态发生变化时,它会自动通知所有注册的观察者,触发他们执行相应的更新操作。这种模式特别是用于创建松耦合的系统。我不清楚上述过程中观察者是如何注册的,并且被观察者如何通知的观察者?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class Observer:
def update(self, news):
"""接收新闻更新的方法。

该方法应当由继承自Observer类的所有子类实现,以便当新闻发布者有新闻更新时,能够通知所有订阅者。

Args:
news: 一个字符串,表示接收到的新闻内容。
"""
pass

class EmailSubscriber(Observer):
def update(self, news):
"""当新闻更新时,通过电子邮件通知订阅者。

实现Observer类中的update方法,以电子邮件形式接收新闻。

Args:
news: 一个字符串,表示接收到的新闻内容。
"""
print(f"Email Subscriber received news: {news}")

class SMSSubscriber(Observer):
def update(self, news):
"""当新闻更新时,通过短信通知订阅者。

实现Observer类中的update方法,以短信形式接收新闻。

Args:
news: 一个字符串,表示接收到的新闻内容。
"""
print(f"SMS Subscriber received news: {news}")

class NewsPublisher:
def __init__(self):
"""初始化新闻发布者。

创建一个新的新闻发布者实例,该实例可以注册和注销观察者,同时发布新闻给所有注册的观察者。
"""
self.__subscribers = []
self.__latestNews = None

def register(self, subscriber):
"""注册一个新的观察者以接收新闻更新。

Args:
subscriber: 一个Observer类的实例,表示要注册的观察者。
"""
if subscriber not in self.__subscribers:
self.__subscribers.append(subscriber)

def unregister(self, subscriber):
"""注销一个观察者,使其不再接收新闻更新。

Args:
subscriber: 一个Observer类的实例,表示要注销的观察者。
"""
self.__subscribers.remove(subscriber)

def notifySubscribers(self):
"""通知所有注册的观察者最新的新闻。

遍历所有注册的观察者,并调用它们的update方法,传递最新的新闻内容。
"""
for subscriber in self.__subscribers:
subscriber.update(self.__latestNews)

def addNews(self, news):
"""添加新闻并通知所有注册的观察者。

设置最新的新闻内容,并自动调用notifySubscribers方法通知所有观察者。

Args:
news: 一个字符串,表示要发布的新闻内容。
"""
self.__latestNews = news
self.notifySubscribers()

if __name__ == "__main__":
# 创建被观察者
news_publisher = NewsPublisher()

# 创建观察者
email_subscriber = EmailSubscriber()
sms_subscriber = SMSSubscriber()

# 注册观察者
news_publisher.register(email_subscriber)
news_publisher.register(sms_subscriber)

# 添加一条新闻,自动通知所有观察者
news_publisher.addNews("New Python Version Released!")

# 注销一个观察者
news_publisher.unregister(email_subscriber)

# 添加另一条新闻,只有注册的观察者会收到通知
news_publisher.addNews("New Java Version Released!")

单例模式是一种确保类在任何给定时间内只有一个实例的设计模式,并提供一个全局访问点来获取该实例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import threading

class SingletonClass:
_instance = None
_lock = threading.Lock()

def __new__(cls, *args, **kwargs):
with cls._lock:
if not cls._instance:
cls._instance=super(SingletonClass, cls).__new__(cls, *args, **kwargs)
return cls._instance

from functools import wraps

def singleton(cls):
instances = {}
lock = threading.Lock()

@wraps(cls)
def wrapper(*args, **kwargs):
if cls not in instances:
with lock:
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper






  

VMware16安装_Ubuntu

第一节 VMware16安装

Step1:下载VMware Workstation Pro

要安装VMware,请首先在系统上下载二进制软件包。在VMware官方网站上找到最新的稳定版本。

1.打开一个Web浏览器,转到VMware的官方网站,然后按照以下路径导航到 Try VMware Workstation Pro page by following the path:

Products > Workstation Pro > Try VMware Workstation Pro

2.由于要在Ubuntu上进行安装,请找到适用于Linux的安装软件,然后单击DOWNLOAD NOW

Screenshot-20210501221222-1901x868

Step2:安装先决条件

GNU Compiler CollectionBuild Essential是安装VMware Workstation所需的软件先决条件。

如果您的系统上没有它,请执行以下步骤安装它们:

1.右键单击窗口,然后选择“在终端中打开”,从“下载”文件夹中打开终端

2.在安装任何软件之前,请确保使用以下命令更新软件包存储库:

1
sudo apt update

3.然后,安装必备组件GNU Compiler CollectionBuild Essential,这些必备组件将在安装过程中使用。运行命令:

1
sudo apt install gcc build-essential

y确认安装,然后按Enter

Step3:提取VMware Installer

在继续进行正式安装过程之前,在终端提取下载的.bundle文件。

1.在终端中打开下载的bundle文件目录,并为其添加可执行权限:

1
sudo chmod +x VMware-Player-16.1.1-17801498.x86_64.bundle

image-20210504210952017

image-20210504211119991

复制完整的文件名,下一步将需要它。

2.接下来,通过键入命令sudo ./+完整的文件名来提取文件。

命令输出将是:

image-20210504211345406

3.提取完文件后,它将自动打开一个新窗口,即VMware Workstation Installer

vmware-agree-fs8

Step4:安装VMware Workstation

1.启动VMware Workstation Installer后,通过选择配置首选项并单击“下一步”来完成这些步骤。

2.完成安装后,它将显示“安装已成功”通知。

3.通过在Ubuntu Dash中键入名称搜索WMware通过单击图标即可打开虚拟化软件。

image-20210504211619227

4.在登陆VMware Workstation的 窗口之前,它将要求您:

  • 输入许可证密钥
  • 免费试用30天。
1
2
3
4
5
6
7
Serial keys:    
ZF3R0-FHED2-M80TY-8QYGC-NPKYF
YF390-0HF8P-M81RQ-2DXQE-M2UT6
ZF71R-DMX85-08DQY-8YMNC-PPHV8
AZ3E8-DCD8J-0842Z-N6NZE-XPKYF
FC11K-00DE0-0800Z-04Z5E-MC8T6
(version for 16pro)

5.输入上述密钥之一后,即可打开VMware 开始体验。

image-20210504212241530

截至目前,VMware已经安装完成,Centos镜像的安装请查看下一节

scala安装

第十节 scala安装

  • 安装

    1
    2
    3
    cd /usr/app/
    wget https://downloads.lightbend.com/scala/2.11.11/scala-2.11.11.tgz
    tar -zxvf scala-2.11.11.tgz
  • 配置环境变量

    1
    2
    3
    4
    5
    6
    7
    vi /etc/profile
    #添加以下内容
    export Scala_HOME=scala-2.11.11
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin:$Flume_HOME/bin:
    $Scala_HOME/bin
    #刷新配置文件
    source /etc/profile
  • 检测 scala 版本

    1
    2
    cd /usr/app
    scala -version

    image-20210508114514205

  • 检测 scala 的客户端

    1
    2
    scala 
    scala> print("Hello Scala")

    image-20210508114239749

    image-20210508114451030

  

spark安装

第十一节spark安装

  • 安装

    1
    2
    3
    cd /usr/app
    wget https://archive.apache.org/dist/spark/spark-2.0.0/spark-2.0.0-bin-hadoop2.7.tgz
    tar -zxvf spark-2.0.0-bin-hadoop2.7.tgz spark-2.0.0-bin-hadoop2.7
  • 添加环境变量

    1
    2
    3
    4
    5
    vi /etc/profile
    # 添加以下内容
    export Spark_HOME=/usr/app/spark-2.0.0-bin-hadoop2.7
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin:$Fl
    ume_HOME/bin:$Spark_HOME/bin:$Scala_HOME/bin
  • 配置./conf/slaves

    1
    2
    3
    4
    5
    6
    7
    8
    /usr/app/spark-2.0.0-bin-hadoop2.7/conf/

    # 首先将 slaves.template 拷贝一份
    cp -r slaves.template slaves
    # 修改 slaves 文件,添加
    hadoop11
    hadoop12
    hadoop13
  • 配置./conf/spark-env.sh

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #将 spark-env.sh. template 拷贝一份
    cp -r spark-env.sh.template spark-env.sh
    vi /conf/spark-env.sh
    #添加以下内容
    export JAVA_HOME=/usr/app/jdk1.8.0_77
    export Scala_HOME=scala-2.11.11
    export SPARK_MASTER_IP=hadoop11
    export SPARK_WORKER_MEMORY=2g
    export MASTER=spark://hadoop11:7077
  • 将 spark-2.0.0-bin-hadoop2.7 文件夹拷贝到另外两个结点

    1
    2
    scp -r /usr/app/spark-2.0.0-bin-hadoop2.7 root@hadoop12:/usr/app
    scp -r /usr/app/spark-2.0.0-bin-hadoop2.7 root@hadoop13:/usr/app
  • 编辑其余两台的环境变量

    1
    2
    export Spark_HOME=/usr/app/spark-2.0.0-bin-hadoop2.7
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HBASE_HOME/bin:$Spark_HOME/bin:$S
  • 启动

    1
    2
    /usr/app/spark-2.0.0-bin-hadoop2.7/sbin/start-all.sh #启动Spark集群
    /usr/app/spark-2.0.0-bin-hadoop2.7/bin/spark-shell #启动spark-shell

    image-20210508123207437

  

Centos7 安装

第二节 Centos7 安装

CentOS是基于Red Hat Enterprise Linux(RHEL)的开源Linux发行版。由于CentOS 7的稳定性和活跃的开发人员社区,它被视为Web托管的首选选项。

在本教程中,通过几个简单的步骤学习如何安装CentOS 7。

Prerequisites

  • 建议最少10GB的可用磁盘空间
  • CentOS 7 ISO安装文件

Step1:下载CentOS 7

要下载官方和最新的CentOS 7 ISO文件,请浏览至阿里云镜像

image-20210504214435601

建议Minimal-2009.iso 即可

Step2:配置CentOS 7镜像

  • 打开Vmware ,点击左上角File选择New Virtual Machine

image-20210504214935853

  • 选择 Typical ,继续Next

image-20210504215120475

  • 选择 Use ISO image ,然后找到下载好的镜像文件,Next. image-20210504215957383

  • Guest Operating System 选择Linux,Next. image-20210504215551562

  • 选择虚拟机存放的位置(完整的集群环境需约15G的空间),Next.

ERROR

  • 分配15G的磁盘空间,Next. image-20210504220845908
  • FInsh. image-20210504221006929
  • close. image-20210504221049314

Step3:启动CentOS ISO镜像

  • 开始安装过程。为此,请选择Install CentOS 7。

image-20210504221343184

  • 选择语言 中文,继续。

image-20210504221713873

  • 点击安装目标位置,默认即可
  • 设置网络和主机名 image-20210504223057583
  • 设置主机名后,点击配置 image-20210504223315845
  • 点击VMware 左上角的Edit 选择 Virtual Network editor.

gnome-shell-screenshot-KZE420

  • 查看NAT设置中相应的IPV4地址及网关 gnome-shell-screenshot-RS7020
  • 在IPV4设置中,方法选择手动,将刚才记录的数据填入相应的虚拟机设置中,IP地址保持前三段数字相同,末尾段自定义。
  • gnome-shell-screenshot-5F4720
  • 设置root账号和自定义用户,Root用户仅需设置密码,然后点击创建用户,将用户名设为Hadoop,选择“将此用户做为管理员”

image-20210504221853570

image-20210504221830241

image-20210504221939226

  • 软件安装,选择最小安装。
  • 等待安装完成(需要较长时间),点击重启 image-20210504222150422
  • 登录系统 输入对应的用户名与密码进入系统。

image-20210504222421325

至此,centos7虚拟机安装完成。

下节Hadoop2.7 安装

Hadoop2.7 安装

第三节 Hadoop2.7 安装

介绍

Step1: 配置远程登录

由于我们没有安装桌面环境,虚拟机中Centos的终端相对简陋,我们在宿主机终端通过SSH登录Centos即可.(主机系统为Ubuntu ,我们不需要下载其他的远程连接工具)

  • 将服务器IP设为静态

    打开网络配置文件,命令如下

    1
    sudo  vi /etc/sysconfig/network-scripts/ifcfg-ens33

    用如下内容替换文件中的内容,将注释内容更改为自己服务器相应的。

    1
    2
    3
    4
    5
    6
    7
    8
    TYPE="Ethernet"
    BOOTPROTO="static"
    DEVICE="ens33"
    ONBOOT="yes"
    IPADDR=192.168.200.101 #IP
    NETMASK=255.255.255.0 #子网掩码
    GATEWAY=192.168.200.2 #网关
    DNS1=114.114.114.114

    重启网络

    1
    sudo service network restart
  • 在宿主机hosts文件中添加相应服务器的域名映射.

    1
    sudo gedit /etc/hosts

    img

  • 测试SSH登录

    1
    sudo ssh hadoop14

    image-20210505210240332

  • 更改主机名

    1
    sudo vi /etc/hostname # 修改为master

    image-20210505223717010

Step2: 安装JDK

  • Hadoop支持Openjdk ,因此我们可用使用命令 安装openjdk7,替代Oracle JDK。

    1
    su -c "yum install java-1.7.0-openjdk"
  • 查看Java版本

    1
    java -version

    image-20210505211303880

  • 配置Java环境变量

    1
    2
    3
    sudo vi /etc/profile
    # java
    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64

    Step3: 安装Hadoop2.7.3

  • 新建资源目录

    1
    2
    sudo mkdir /opt/softwares   
    sudo mkdir /opt/modules
  • 安装wget

    1
    yum install wget
  • 下载hadoop2.7.3 ,速度较慢

    推荐使用百度网盘下载到本地后,使用scp命令上传到服务器

    链接: https://pan.baidu.com/s/1W_S5BcghFqjwdUi0GfqeSQ 密码: p2ek

    1
    2
    3
    wget  https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz #在线下载

    sudo scp -r hadoop-2.7.3.tar.gz hadoop14:/opt/softwares/ #本地上传
  • 解压hadoop,转到hadoop文件夹下,执行以下命令。

    1
    tar -xvf  hadoop-2.7.3.tar.gz
  • 关闭防火墙 由于hadoop需要打开的端口太多,因此此处暂时关闭了防火墙。要关闭防火墙,必须在root用户下使用以下命令:

    1
    2
    3
    4
    #Close the firewall
    systemctl stop firewalld.service
    #Turn off boot and self-start
    systemctl disable firewalld.service

    创建数据存储目录

    1
    2
    3
    cd /usr/local/hadoop
    mkdir tmp
    mkdir -p hdfs/data hdfs/name
  • 配置环境变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        sudo vi /etc/profile
    export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
    export HADOOP_HOME=/opt/softwares/hadoop
    export HADOOP_INSTALL=$HADOOP_HOME
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export YARN_HOME=$HADOOP_HOME
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
    使用以下命令初始化变量。
    source /etc/profile
    完成后,您现在可以检查是否设置了环境变量。运行以下命令。
    echo $JAVA_HOME
    它应该提供以下输出。
    /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
    同时运行以下命令。
    echo $HADOOP_HOME
    它应该显示以下输出。
    /opt/softwares/hadoop
  • 配置,进入hadoop目录下

    1 修改core-site.xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <configuration>
    <property>
    <name>fs.default.name</name>
    <value>hdfs://master:9000</value> #
    </property>
    <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/home/hadoop/tmp</value> #
    <description>Abase for other temporary directories.</description>
    </property>
    </configuration>

    2 修改hdfs-site.xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <configuration>
    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>linux-node1:9001</value>
    <description># View HDFS status </description> through the web interface
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/home/hadoop/dfs/name</value> #
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/home/hadoop/dfs/data</value> #
    </property>
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    <description># Each Block has two backups </description>
    </property>
    <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property>
    </configuration>

    3 修改mapred-site.xml (重命名mapred-site.xml.template并添加以下内容) (这是MapReduce任务的配置。因为Hadoop 2.x使用yarn框架来实现分布式部署,所以必须在mapreduce.framework.name属性下配置yarn。mapred.map.tasks和mapred.reduce.tasks分别是map和reduce的任务数。)

    1
    mv mapred-site.xml.template mapred-site.xml
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapreduce.jobhistory.address</name>
    <value>master:10020</value> #
    </property>
    <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>master:19888</value> #
    </property>
    </configuration>

    4 配置节点yarn-site.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <configuration>
    <!-- Site specific YARN configuration properties -->
    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
    <name>yarn.resourcemanager.address</name>
    <value>master:8032</value> #
    </property>
    <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>master:8030</value> #
    </property>
    <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>master:8031</value> #
    </property>
    <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>master:8033</value> #
    </property>
    <property>
    <name>yarn.resourcemanager.webapp.address</name>
    <value>master:8088</value> #
    </property>
    <property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>8192</value>
    </property>
    </configuration>

    5 配置hadoop环境变量

    1
    2
    3
    4
    5
    6
    [root@master ~]$   vi /etc/profile
    #Replace the previously modified java environment variable.
    export JAVA_HOME=java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    1
    2
    3
    4
    5
    [hadoop@master ~]$   vi ~/.bashrc
    export JAVA_HOME=java-1.7.0-openjdk-1.7.0.261-2.6.22.2.el7_8.x86_64
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export HADOOP_HOME=/usr/local/hadoop
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    Step4:克隆虚拟机

  • 克隆Hadoop02,Hadoop03节点。

    关闭虚拟机master,然后在VMware左侧的虚拟机列表中右键单击【Hadoop01】,选择【Manager】->【Clone】

image-20210506213059244

点击下一步,在Clone Type处选择Create a full clone

image-20210506213229331

修改虚拟机名称与文件路径,点击完成,等待克隆完成

image-20210506213538939

克隆Hadoop03的步骤同上

  • 修改节点主机名

    首先修改Hadoop02和Hadoop03的主机名(他们目前都是master)

    1
    2
    3
    vi /etc/hostnames
    # Hadoop02修改为slave1
    # Hadoop03修改为slave2

    image-20210506213818091

  • 修改IP

    1
    2
    3
    4
    sudo  vi /etc/sysconfig/network-scripts/ifcfg-ens33
    # 修改Hadoop02的IP为192.168.200.102
    # 修改Hadoop03的IP为192.168.200.103
    sudo service network restart #重启网络

    image-20210506214147981

  • 添加域名解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    分别修改Hadoop01,Hadoop02,Hadoop03,及宿主机的域名映射文件
    sudo vi /etc/hosts
    # 在host文件末尾追加以下内容:

    # 192.168.200.101 master

    # 192.168.200.102 slave1

    # 192.168.200.103 slave2

    image-20210506220314774

  • 在各节点使用ping命令检查是否配置成功:

    1
    2
    3
    ping master
    ping slave1
    ping slave2

    image-20210506220516744

Step5:配置ssh免密登录

  • 生成密钥文件:

    1
    2
    3
    ssh-keygen -t rsa
    # 生成中按enter即可
    # 在三台服务器中执行此命令
  • SSH分发

    1
    2
    3
    4
    5
    ssh-copy-id master
    ssh-copy-id slave1
    ssh-copy-id slave2
    # 在三台服务器中执行上述命令
    #Are you sure you want to continue connecting (yes/no)? 需输入yes

    image-20210506220952744

  • 验证SSH登录

    1
    2
    3
    4
    ssh master
    ssh slave1
    ssh slave2
    #三台机器中分别执行上述命令

    image-20210506221045657

  • 格式化一个新的分布式文件系统:

1
2
3
4
5
hadoop namenode -format
#在第一使用 Hadoop 之前,需要先格式化
#在master上,执行上述命令
#显示 tmp/dfs/name has been successfully formatted
#及Exiting with status 0 表明格式化成功

image-20210507142357281

Step6: 启动Hadoop

1
2
3
#在master上执行
cd /usr/app/hadoop-2.7.3/sbin/
./start-all.sh
  • jps查看各节点启动进程

    image-20210507160031766

    image-20210507150351988

    image-20210507150409026

Step7: 集群web

1
2
3
Hadoop集群启动并运行后,可以通过web-ui进行集群查看,如下所述:
然后本机访问http://(Hadoop01 IP):50070 #hdfs
http://(Hadoop01 IP):8088 #yarn

image-20210507160547096

image-20210507193430132

Step8:验证

  • 验证 HDFS HA 首先向 hdfs 上传一个文件

    1
    2
    hadoop fs -put /etc/profile /
    hadoop fs -ls /

    image-20210507194605490

    通过浏览器访问:http://192.168.200.11:50070

  • 验证 YARN

    运行一下 hadoop 提供的 demo 中的 WordCount 程序:

    1
    hadoop jar /usr/app/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /profile /out

    image-20210507194159027

至此,hadoop安装完成 下节Zookeeper安装

  

:D 一言句子获取中...