集群上独立运行Alluxio1.8使用HA HDFS为底层存储系统

软件版本:

软件 版本
jdk jdk1.8.0_191
zookeeper zookeeper-3.4.12
hadoop hadoop-2.8.5
alluxio alluxio-1.8.0-hadoop-2.8

配置JDK:

解压并创建软链接:

$ sudo ln -s /opt/Software/jdk1.8.0_191/ /jdk

配置环境变量:

$ vi /etc/profile

添加以下内容:

export JAVA_HOME=/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

更新环境变量文件:

$ source /etc/profile

配置免密钥:

查看本地是否装有SSH 协议:

$ sudo rpm -qa|grep ssh

如果没有需要yum安装 ssh

在用户目录下进入.ssh目录检查是否需要配置免密钥

默认没有 .ssh 目录

如果没有配置执行就生成 SSH 密钥:

$ ssh-keygen -t rsa

连续四个回车执行完毕

将公钥拷贝到目标远程主机和自己:

$ ssh-copy-id dpnice@cdh1
$ ssh-copy-id dpnice@cdh2
$ ssh-copy-id dpnice@cdh3

安装配置zookeeper:

解压zookeeper:

进入解压后zookeeper 目录创建文件夹:

$ mkdir log
$ mkdir data

进入conf目录

$ cp zoo_sample.cfg zoo.cfg 
$ vi zoo.cfg

添加或修改以下内容:

dataDir=/opt/Software/zookeeper-3.4.12/data
dataLogDir=/opt/Software/zookeeper-3.4.12/log

server.1=cdh1:2222:2225
server.2=cdh2:2222:2225
server.3=cdh3:2222:2225

在数据目录/opt/Software/zookeeper-3.4.12/data下面新建名为myid的文件:

$ vi /opt/Software/zookeeper-3.4.12/data/myid

添加cdh1的myid文件内容为

1

各个主机对应的内容是不同的,cdh1的内容是1,cdh2的内容是2,cdh3的内容是3,分别对应配置文件中server.x中的x

将配置文件发送到其他节点:

$ scp -r /opt/Software/zookeeper-3.4.12/conf/zoo.cfg dpnice@cdh2:/opt/Software/zookeeper-3.4.12/conf/
$ scp -r /opt/Software/zookeeper-3.4.12/conf/zoo.cfg dpnice@cdh3:/opt/Software/zookeeper-3.4.12/conf/

所有节点执行启动:

$ /opt/Software/zookeeper-3.4.12/bin/zkServer.sh start

查看节点的身份状态:

$ /opt/Software/zookeeper-3.4.12/bin/zkServer.sh status

安装Haoop 配置HA HDFS 、HA YARN:

解压Hadoop:

进入Hadoop目录

$cd /opt/Software/hadoop-2.8.5/

创建文件夹:

mkdir /opt/Software/hadoop-2.8.5/tmp
mkdir /opt/Software/hadoop-2.8.5/data

进入Hadoop配置文件目录:

$ cd etc/hadoop/

编辑配置文件:

$ vi core-site.xml 追加如下内容:

<!-- 指定hdfs的nameservice-->
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://nns</value>
</property>
<!--指定hadoop数据临时存放目录-->
<property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/Software/hadoop-2.8.5/tmp</value>
</property>
<property>
     <name>io.file.buffer.size</name>
     <value>4096</value>
</property>
<!--指定zookeeper地址-->
<property>
     <name>ha.zookeeper.quorum</name>
     <value>cdh1:2181,cdh2:2181,cdh3:2181</value>
</property>
<property>
 <name>fs.trash.interval</name>
 <value>1440</value>
 <description>默认0,表示不开启垃圾箱功能,大于0时,表示删除的文件在垃圾箱中存留的分钟数,</description>
</property>
<property>
 <name>fs.trash.checkpoint.interval</name>
 <value>1440</value>
 <description>垃圾回收检查的时间间隔,值应该小于等于 fs.trash.interval。默认0,此时按fs.trash.interval的值大小执行</description>
</property>

$ vi hdfs-site.xml

NameNode的名字不能带有 “_” 下划线

<!-- 指定hdfs的nameservice为nns,需要和core-site.xml中的保持一致 -->
<property>
	<name>dfs.nameservices</name>
	<value>nns</value>
</property>
<!-- nns下面有两个NameNode,分别是 nn0 ,nn1 -->
<property>
	<name>dfs.ha.namenodes.nns</name>
	<value>nn0,nn1</value>
</property>
<!-- nn0 的RPC通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.nns.nn0</name>
	<value>cdh1:9000</value>
</property>
<!-- nn0 的http通信地址 -->
<property>
	<name>dfs.namenode.http-address.nns.nn0</name>
	<value>cdh1:50070</value>
</property>
<!-- nn1 的RPC通信地址 -->
<property>
	<name>dfs.namenode.rpc-address.nns.nn1</name>
	<value>cdh2:9000</value>
</property>
<!-- nn1 的http通信地址 -->
<property>
	<name>dfs.namenode.http-add
Alluxio 统一访问多个底层存储系统的实现原理主要依赖其架构设计和一系列关键技术,包括命名空间统一、虚拟文件系统、缓存机制、存储模块扩展等。 ### 统一命名空间 Alluxio 提供了一个统一的全局命名空间,将多个底层存储系统的目录结构抽象为一个逻辑上的统一视图。这种抽象使得用户无需关心数据具体存储在哪个底层系统中,只需通过 Alluxio 的接口访问数据。Alluxio Master 负责管理文件系统的元数据,并将不同存储系统的路径映射到统一的命名空间中 [^4]。 ### 虚拟文件系统 Alluxio 作为虚拟文件系统,屏蔽了底层存储系统的差异性,将不同存储系统的接口统一转换为 Alluxio 文件系统接口。应用程序通过 Alluxio 客户端访问数据时,Alluxio 会自动将请求路由到正确的底层存储系统,并处理数据的读写操作。这种设计使得 Alluxio 能够支持 HDFS、S3、GlusterFS 等多种存储系统 [^3]。 ### 缓存机制 Alluxio 以内存为中心的架构为基础,利用缓存机制提升数据访问性能。当数据首次被访问时,Alluxio 会从底层存储系统中加载数据到内存中,并在后续访问中直接从内存中提供数据,从而避免重复访问较慢的底层存储系统Alluxio 支持 LRU、LFU 等缓存策略,确保热数据保留在内存中,而冷数据则被写入 SSD 或磁盘 [^3]。 ### 存储模块扩展 Alluxio 允许动态扩展底层存储模块,支持对新存储系统的集成。对于没有原生支持的存储系统,用户可以通过添加与 Alluxio 相连的底层存储模块,使其与 Alluxio 一起工作。这种扩展性使得 Alluxio 可以轻松适应不断变化的存储环境 [^5]。 ### 数据访问流程 当应用程序访问 Alluxio 中的数据时,Alluxio 首先检查数据是否已经在缓存中。如果数据存在,则直接从缓存中返回;如果数据不存在,则 Alluxio 会从对应的底层存储系统中加载数据,并将其缓存到内存中,以便后续访问。这种机制不仅提高了数据访问速度,还简化了应用程序的开发流程 [^2]。 ### 代码示例 以下是一个简单的 Python 示例,展示如何通过 Alluxio 访问存储在底层系统中的数据: ```python import alluxio # 初始化 Alluxio 客户端 client = alluxio.Client('localhost', port=39999) # 读取文件 with client.open('/path/in/alluxio') as f: data = f.read() print(data) ``` 通过上述机制,Alluxio 实现了对多个底层存储系统的统一访问,同时提升了数据访问性能和管理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值