当前位置:首页 » 云服务器 » 大数据服务器如何进入hdfs

大数据服务器如何进入hdfs

发布时间: 2022-08-18 08:28:17

Ⅰ 如何实现让用户在网页中上传下载文件到HDFS中

hadoop计算需要在hdfs文件系统上进行,文件上传到hdfs上通常有三种方法:a hadoop自带的dfs服务,put;b hadoop的API,Writer对象可以实现这一功能;c 调用OTL可执行程序,数据从数据库直接进入hadoop

hadoop计算需要在hdfs文件系统上进行,因此每次计算之前必须把需要用到的文件(我们称为原始文件)都上传到hdfs上。文件上传到hdfs上通常有三种方法:

a hadoop自带的dfs服务,put;

b hadoop的API,Writer对象可以实现这一功能;

c 调用OTL可执行程序,数据从数据库直接进入hadoop

由于存在ETL层,因此第三种方案不予考虑

将a、b方案进行对比,如下:

1 空间:方案a在hdfs上占用空间同本地,因此假设只上传日志文件,则保存一个月日志文件将消耗掉约10T空间,如果加上这期间的各种维表、事实表,将占用大约25T空间

方案b经测试,压缩比大约为3~4:1,因此假设hdfs空间为100T,原来只能保存约4个月的数据,现在可以保存约1年

2 上传时间:方案a的上传时间经测试,200G数据上传约1小时

方案b的上传时间,程序不做任何优化,大约是以上的4~6倍,但存在一定程度提升速度的余地

3 运算时间:经过对200G数据,大约4亿条记录的测试,如果程序以IO操作为主,则压缩数据的计算可以提高大约50%的速度,但如果程序以内存操作为主,则只能提高5%~10%的速度

4 其它:未压缩的数据还有一个好处是可以直接在hdfs上查看原始数据。压缩数据想看原始数据只能用程序把它导到本地,或者利用本地备份数据

压缩格式:按照hadoop api的介绍,压缩格式分两种:BLOCK和RECORD,其中RECORD是只对value进行压缩,一般采用BLOCK进行压缩。

对压缩文件进行计算,需要用SequenceFileInputFormat类来读入压缩文件,以下是计算程序的典型配置代码:

JobConf conf = new JobConf(getConf(), log.class);
conf.setJobName(”log”);
conf.setOutputKeyClass(Text.class);//set the map output key type
conf.setOutputValueClass(Text.class);//set the map output value type

conf.setMapperClass(MapClass.class);
//conf.setCombinerClass(Rece.class);//set the combiner class ,if havenot, use Recuce class for default
conf.setRecerClass(Rece.class);
conf.setInputFormat(SequenceFileInputFormat.class);//necessary if use compress

接下来的处理与非压缩格式的处理一样

Ⅱ 如何使用Java API读写HDFS

Java API读写HDFS

public class FSOptr {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Configuration conf = new Configuration();
makeDir(conf);
rename(conf);
delete(conf);

}

// 创建文件目录
private static void makeDir(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path dir = new Path("/user/hadoop/data/20140318");
boolean result = fs.mkdirs(dir);// 创建文件夹
System.out.println("make dir :" + result);

// 创建文件,并写入内容
Path dst = new Path("/user/hadoop/data/20140318/tmp");
byte[] buff = "hello,hadoop!".getBytes();
FSDataOutputStream outputStream = fs.create(dst);
outputStream.write(buff, 0, buff.length);
outputStream.close();
FileStatus files[] = fs.listStatus(dst);
for (FileStatus file : files) {
System.out.println(file.getPath());
}
fs.close();
}

// 重命名文件
private static void rename(Configuration conf) throws Exception {

FileSystem fs = FileSystem.get(conf);
Path oldName = new Path("/user/hadoop/data/20140318/1.txt");
Path newName = new Path("/user/hadoop/data/20140318/2.txt");
fs.rename(oldName, newName);

FileStatus files[] = fs.listStatus(new Path(
"/user/hadoop/data/20140318"));
for (FileStatus file : files) {
System.out.println(file.getPath());
}
fs.close();
}

// 删除文件
@SuppressWarnings("deprecation")
private static void delete(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/user/hadoop/data/20140318");
if (fs.isDirectory(path)) {
FileStatus files[] = fs.listStatus(path);
for (FileStatus file : files) {
fs.delete(file.getPath());
}
} else {
fs.delete(path);
}

// 或者
fs.delete(path, true);

fs.close();
}

/**
* 下载,将hdfs文件下载到本地磁盘
*
* @param localSrc1
* 本地的文件地址,即文件的路径
* @param hdfsSrc1
* 存放在hdfs的文件地址
*/
public boolean sendFromHdfs(String hdfsSrc1, String localSrc1) {

Configuration conf = new Configuration();
FileSystem fs = null;
try {
fs = FileSystem.get(URI.create(hdfsSrc1), conf);
Path hdfs_path = new Path(hdfsSrc1);
Path local_path = new Path(localSrc1);

fs.ToLocalFile(hdfs_path, local_path);

return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}

/**
* 上传,将本地文件到hdfs系统中
*
* @param localSrc
* 本地的文件地址,即文件的路径
* @param hdfsSrc
* 存放在hdfs的文件地址
*/
public boolean sendToHdfs1(String localSrc, String hdfsSrc) {
InputStream in;
try {
in = new BufferedInputStream(new FileInputStream(localSrc));
Configuration conf = new Configuration();// 得到配置对象
FileSystem fs; // 文件系统
try {
fs = FileSystem.get(URI.create(hdfsSrc), conf);
// 输出流,创建一个输出流
OutputStream out = fs.create(new Path(hdfsSrc),
new Progressable() {
// 重写progress方法
public void progress() {
// System.out.println("上传完一个设定缓存区大小容量的文件!");
}
});
// 连接两个流,形成通道,使输入流向输出流传输数据,
IOUtils.Bytes(in, out, 10240, true); // in为输入流对象,out为输出流对象,4096为缓冲区大小,true为上传后关闭流
return true;
} catch (IOException e) {
e.printStackTrace();
}

} catch (FileNotFoundException e) {
e.printStackTrace();
}
return false;
}

/**
* 移动
*
* @param old_st原来存放的路径
* @param new_st移动到的路径
*/
public boolean moveFileName(String old_st, String new_st) {

try {

// 下载到服务器本地
boolean down_flag = sendFromHdfs(old_st, "/home/hadoop/文档/temp");
Configuration conf = new Configuration();
FileSystem fs = null;

// 删除源文件
try {
fs = FileSystem.get(URI.create(old_st), conf);
Path hdfs_path = new Path(old_st);
fs.delete(hdfs_path);
} catch (IOException e) {
e.printStackTrace();
}

// 从服务器本地传到新路径
new_st = new_st + old_st.substring(old_st.lastIndexOf("/"));
boolean uplod_flag = sendToHdfs1("/home/hadoop/文档/temp", new_st);

if (down_flag && uplod_flag) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}

// 本地文件到hdfs
private static void CopyFromLocalFile(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path src = new Path("/home/hadoop/word.txt");
Path dst = new Path("/user/hadoop/data/");
fs.FromLocalFile(src, dst);
fs.close();
}

// 获取给定目录下的所有子目录以及子文件
private static void getAllChildFile(Configuration conf) throws Exception {
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/user/hadoop");
getFile(path, fs);
}

private static void getFile(Path path, FileSystem fs)throws Exception {
FileStatus[] fileStatus = fs.listStatus(path);
for (int i = 0; i < fileStatus.length; i++) {
if (fileStatus[i].isDir()) {
Path p = new Path(fileStatus[i].getPath().toString());
getFile(p, fs);
} else {
System.out.println(fileStatus[i].getPath().toString());
}
}
}

//判断文件是否存在
private static boolean isExist(Configuration conf,String path)throws Exception{
FileSystem fileSystem = FileSystem.get(conf);
return fileSystem.exists(new Path(path));
}

//获取hdfs集群所有主机结点数据
private static void getAllClusterNodeInfo(Configuration conf)throws Exception{
FileSystem fs = FileSystem.get(conf);
DistributedFileSystem hdfs = (DistributedFileSystem)fs;
DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
String[] names = new String[dataNodeStats.length];
System.out.println("list of all the nodes in HDFS cluster:"); //print info

for(int i=0; i < dataNodeStats.length; i++){
names[i] = dataNodeStats[i].getHostName();
System.out.println(names[i]); //print info

}
}

//get the locations of a file in HDFS
private static void getFileLocation(Configuration conf)throws Exception{
FileSystem fs = FileSystem.get(conf);
Path f = new Path("/user/cluster/dfs.txt");
FileStatus filestatus = fs.getFileStatus(f);
BlockLocation[] blkLocations = fs.getFileBlockLocations(filestatus,0,filestatus.getLen());
int blkCount = blkLocations.length;
for(int i=0; i < blkCount; i++){
String[] hosts = blkLocations[i].getHosts();
//Do sth with the block hosts

System.out.println(hosts);
}
}

//get HDFS file last modification time
private static void getModificationTime(Configuration conf)throws Exception{
FileSystem fs = FileSystem.get(conf);
Path f = new Path("/user/cluster/dfs.txt");
FileStatus filestatus = fs.getFileStatus(f);

long modificationTime = filestatus.getModificationTime(); // measured in milliseconds since the epoch

Date d = new Date(modificationTime);
System.out.println(d);
}

}

Ⅲ 如何为大数据处理构建高性能Hadoop集群

越来越多的企业开始使用Hadoop来对大数据进行处理分析,但Hadoop集群的整体性能却取决于CPU、内存、网络以及存储之间的性能平衡。而在这篇文章中,我们将探讨如何为Hadoop集群构建高性能网络,这是对大数据进行处理分析的关键所在。

关于Hadoop

“大数据”是松散的数据集合,海量数据的不断增长迫使企业需要通过一种新的方式去管理。大数据是结构化或非结构化的多种数据类型的大集合。而 Hadoop则是Apache发布的软件架构,用以分析PB级的非结构化数据,并将其转换成其他应用程序可管理处理的形式。Hadoop使得对大数据处理成为可能,并能够帮助企业可从客户数据之中发掘新的商机。如果能够进行实时处理或者接近实时处理,那么其将为许多行业的用户提供强大的优势。

Hadoop是基于谷歌的MapRece和分布式文件系统原理而专门设计的,其可在通用的网络和服务器硬件上进行部署,并使之成为计算集群。

Hadoop模型

Hadoop的工作原理是将一个非常大的数据集切割成一个较小的单元,以能够被查询处理。同一个节点的计算资源用于并行查询处理。当任务处理结束后,其处理结果将被汇总并向用户报告,或者通过业务分析应用程序处理以进行进一步分析或仪表盘显示。

为了最大限度地减少处理时间,在此并行架构中,Hadoop“moves jobs to data”,而非像传统模式那样“moving data to jobs”。这就意味着,一旦数据存储在分布式系统之中,在实时搜索、查询或数据挖掘等操作时,如访问本地数据,在数据处理过程中,各节点之间将只有一个本地查询结果,这样可降低运营开支。

Hadoop的最大特点在于其内置的并行处理和线性扩展能力,提供对大型数据集查询并生成结果。在结构上,Hadoop主要有两个部分:

Hadoop分布式文件系统(HDFS)将数据文件切割成数据块,并将其存储在多个节点之内,以提供容错性和高性能。除了大量的多个节点的聚合I/O,性能通常取决于数据块的大小——如128MB。而传统的Linux系统下的较为典型的数据块大小可能是4KB。

MapRece引擎通过JobTracker节点接受来自客户端的分析工作,采用“分而治之”的方式来将一个较大的任务分解成多个较小的任务,然后分配给各个TaskTrack节点,并采用主站/从站的分布方式(具体如下图所示):

Hadoop系统有三个主要的功能节点:客户机、主机和从机。客户机将数据文件注入到系统之中,从系统中检索结果,以及通过系统的主机节点提交分析工作等。主机节点有两个基本作用:管理分布式文件系统中各节点以及从机节点的数据存储,以及管理Map/Rece从机节点的任务跟踪分配和任务处理。数据存储和分析处理的实际性能取决于运行数据节点和任务跟踪器的从机节点性能,而这些从机节点则由各自的主机节点负责沟通和控制。从节点通常有多个数据块,并在作业期间被分配处理多个任务。

部署实施Hadoop

各个节点硬件的主要要求是市县计算、内存、网络以及存储等四个资源的平衡。目前常用的并被誉为“最佳”的解决方案是采用相对较低成本的旧有硬件,部署足够多的服务器以应对任何可能的故障,并部署一个完整机架的系统。

Hadoop模式要求服务器与SAN或者NAS进行直接连接存储(DAS)。采用DAS主要有三个原因,在标准化配置的集群中,节点的缩放数以千计,随着存储系统的成本、低延迟性以及存储容量需求不断提高,简单配置和部署个主要的考虑因素。随着极具成本效益的1TB磁盘的普及,可使大型集群的TB级数据存储在DAS之上。这解决了传统方法利用SAN进行部署极其昂贵的困境,如此多的存储将使得Hadoop和数据存储出现一个令人望而却步的起始成本。有相当大一部分用户的Hadoop部署构建都是采用大容量的DAS服务器,其中数据节点大约1-2TB,名称控制节点大约在1-5TB之间,具体如下图所示:

来源:Brad Hedlund, DELL公司

对于大多数的Hadoop部署来说,基础设施的其他影响因素可能还取决于配件,如服务器内置的千兆以太网卡或千兆以太网交换机。上一代的CPU和内存等硬件的选择,可根据符合成本模型的需求,采用匹配数据传输速率要求的千兆以太网接口来构建低成本的解决方案。采用万兆以太网来部署Hadoop也是相当不错的选择。

万兆以太网对Hadoop集群的作用

千兆以太网的性能是制约Hadoop系统整体性能的一个主要因素。使用较大的数据块大小,例如,如果一个节点发生故障(甚至更糟,整个机架宕机),那么整个集群就需要对TB级的数据进行恢复,这就有可能会超过千兆以太网所能提供的网络带宽,进而使得整个集群性能下降。在拥有成千上万个节点的大型集群中,当运行某些需要数据节点之间需要进行中间结果再分配的工作负载时,在系统正常运行过程中,某个千兆以太网设备可能会遭遇网络拥堵。

每一个Hadoop数据节点的目标都必须实现CPU、内存、存储和网络资源的平衡。如果四者之中的任意一个性能相对较差的话,那么系统的潜在处理能力都有可能遭遇瓶颈。添加更多的CPU和内存组建,将影响存储和网络的平衡,如何使Hadoop集群节点在处理数据时更有效率,减少结果,并在Hadoop集群内添加更多的HDFS存储节点。

幸运的是,影响CPU和内存发展的摩尔定律,同样也正影响着存储技术(TB级容量的磁盘)和以太网技术(从千兆向万兆甚至更高)的发展。预先升级系统组件(如多核处理器、每节点5-20TB容量的磁盘,64-128GB内存),万兆以太网卡和交换机等网络组件是重新平衡资源最合理的选择。万兆以太网将在Hadoop集群证明其价值,高水平的网络利用率将带来效益更高的带宽。下图展示了Hadoop集群与万兆以太网的连接:

许多企业级数据中心已经迁移到10GbE网络,以实现服务器整合和服务器虚拟化。随着越来越多企业开始部署Hadoop,他们发现他们完全不必要大批量部署1U的机架服务器,而是部署更少,但性能更高的服务器,以方便扩展每个数据节点所能运行的任务数量。很多企业选择部署2U或4U的服务器(如戴尔 PowerEdge C2100),每个节点大约12-16个核心以及24TB存储容量。在这种环境下的合理选择是充分利用已经部署的10GbE设备和Hadoop集群中的 10GbE网卡。

在日常的IT环境中构建一个简单的Hadoop集群。可以肯定的是,尽管有很多细节需要微调,但其基础是非常简单的。构建一个计算、存储和网络资源平衡的系统,对项目的成功至关重要。对于拥有密集节点的Hadoop集群而言,万兆以太网能够为计算和存储资源扩展提供与之相匹配的能力,且不会导致系统整体性能下降。

Ⅳ 大数据开发工程师Hadoop(HDFS是如何保证数据可靠性的)

HDFS是如何保证数据可靠性的?

(1)安全模式

① HDFS刚启动时,NameNode进入安全模式,处于安全模式的NameNode不能做任何的文件操作,甚至内部的副本创建也是不允许的,NameNode这时需要和各个DataNode进行通信,获得DataNode存储的数据块信息,并对数据块信息进行检查,只有通过了NameNode的检查,一个数据块才被认为是安全的。当认为安全的数据块所占比例达到了某个阈值,NameNode才会开始启动;

(2)SecondaryNamenode备份机制

① 在Hadoop中使用SecondaryNameNode来备份NameNode的元数据,以防止在NameNode宕机的时候,能从SecondaryNameNode中恢复出NameNode上的元数据;

② NameNode中保存了整个文件系统的元数据,而SecondaryNameNode的作用就是周期性保存NameNode的元数据。元数据中包括FSImage镜像文件数据和EditLog编辑日志。FSImage相当于HDFS的检查点,NameNode启动时候会读取FSImage的内容到内存,并将其与EditLog日志中的所有修改信息合并生成新的FSImage。在NameNode运行过程中,所有关于HDFS的修改都将写入EditLog日志文件中。这样,如果NameNode宕机,可以通过SecondaryNameNode中保存的FSImage和EditLog数据恢复出NameNode最近的状态,尽量减少数据的损失;

(3)心跳机制和副本重新创建

① 为了保证NameNode和各个DataNode的联系,HDFS采用了心跳机制。NameNode周期性的向各个DataNode发送心跳包,而收到心跳包的DataNode要进行回复。因为心跳包是定时发送的,所以NameNode就把要执行的命令也通过心跳包发送给DataNode,而DataNode收到心跳包,一方面要回复NameNode,另一方面就要开始应用数据的传输;

② 如果检测到DataNode失效,NameNode之前保存在这个DataNode上的数据就变成不可用数据。如果有的副本存储在失效的DataNode上,那么需要重新创建这个副本,放到另外可用的地方去;

(4)数据一致性

① 一般来讲,DataNode与应用交互的大部分情况都是通过网络进行的,而网络数据传输带来的一大问题就是数据是否原样到达。为了保证数据的一致性,HDFS采用了数据校验和(checkSum)机制。创建文件时,HDFS会为这个文件生成一个校验和,校验和文件和文件本身保存在同一空间中。传输数据时会将数据与校验和数据一起传输,应用收到数据后可以进行校验,如果两个校验的结果不同,则文件出错了,这个数据块就变成无效的。如果判定为无效,则需要从其他DataNode上读取副本数据;


(每日1小题,进步1点点)

Ⅳ 如何架构大数据系统 hadoop

大数据数量庞大,格式多样化。大量数据由家庭、制造工厂和办公场所的各种设备、互联网事务交易、社交网络的活动、自动化传感器、移动设备以及科研仪器等生成。它的爆炸式增长已超出了传统IT基础架构的处理能力,给企业和社会带来严峻的数据管理问题。因此必须开发新的数据架构,围绕“数据收集、数据管理、数据分析、知识形成、智慧行动”的全过程,开发使用这些数据,释放出更多数据的隐藏价值。

一、大数据建设思路

1)数据的获得

四、总结

基于分布式技术构建的大数据平台能够有效降低数据存储成本,提升数据分析处理效率,并具备海量数据、高并发场景的支撑能力,可大幅缩短数据查询响应时间,满足企业各上层应用的数据需求。

Ⅵ hadoop的hdfs是怎么配置的

① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。
② 运行在廉价的机器上。
③ 适合大数据的处理。多大?多小?HDFS默认会将文件分割成block,64M为1个block。然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中。如果小文件太多,那内存的负担会很重。

Ⅶ Hadoop常见问题解答

Hadoop常见问题解答
(1)Hadoop适不适用于电子政务?为什么?
电子政务是利用互联网技术实现政府组织结构和工作流程的重组优化,建成一个精简、高效、廉洁、公平的政府运作信息服务平台。因此电子政务肯定会产生相关的大量数据以及相应的计算需求,而这两种需求涉及的数据和计算达到一定规模时传统的系统架构将不能满足,就需要借助海量数据处理平台,例如Hadoop技术,因此可以利用Hadoop技术来构建电子政务云平台。

总结一下,任何系统没有绝对的适合和不适合,只有当需求出现时才可以决定,在一个非常小的电子政务系统上如果没有打数据处理以及计算分析需求时就不需要hadoop这样的技术,而实际上,商用的电子政务平台往往涉及到大规模的数据和大量的计算分析处理需求,因此就需要Hadoop这样的技术来解决。(2)hadoop对于实时在线处理有优势吗?
直接使用hadoop进行实时处理时没有优势的,因为Hadoop主要解决的是海量批处理作业计算问题,但是可以使用基于Hadoop的分布式NOsql系统HBase系统以及相关实时处理系统:
1. 基于Hadoop的HBase可以做到实时处理以及相关需求的实时计算,主要解决海量<key,value>相关查询计算等需求。
2. 可以考虑Spark计算,Spark是基于共现内存RDD的系统,比Hadoop更快,时候迭代式计算,例如数据挖掘,机器学习算法等。
3. 还有Storm,Storm是一个免费开源、分布式、高容错的实时计算系统,Storm经常用于在实时分析、在线机器学习、持续计算、分布式远程调用和ETL等领域。
4. 考虑S4, S4是Yahoo!在2010年10月开源的一套通用、分布式、可扩展、部分容错、具备可插拔功能的平台。这套平台主要是为了方便开发者开发处理流式数据(continuous unbounded streams of data)的应用。
你可以依据实际的需求来选择合适的系统。
(3)Hadoop存储海量数据没有问题,但是如何能够做到海量数据的实时检索?
1,可以结合开源的搜索引擎Apache Lucene,Solr 或ElasticSearch
2,海量数据的实时检索可以考虑HBase,建议可以使用hadoop将数据构建成以查询key为键的数据集,然后将<key, value>集合写入Hbase表中,Hbase会自动以key为键进行索引,在数十亿甚至以上的级别下,查询key的value响应时间也估计再10毫秒内。
如果检索条件是多个组合的情况下,可以适当的设计多个hbase表格,这样的检索也是很快的,同时Hbase也是支持二级索引。在符合条件下查询,Hbase也是支持MapRece的,如果对响应时间要求不高的情况下,可以考虑将hive和Hbase系统结合来使用。
如果数据量不是很大的情况下也可以考虑支持类似SQL的NOSLQ系统。
(4)能不能给点hadoop的学习方法以及学习规划,hadoop系统有点庞大,感觉无从学起?
首先搞清楚什么是hadoop以及hadoop可以用来做什么?
然后,可以从最经典的词频统计程序开始,初步了解MapRece的基本思路和处理数据的方式。
接着,就可以正式学习hadoop的基本原理,包括HDFS和MapRece,先从整体,宏观核心原理看,先别看源码级别。
进一步,就可以深入HDFS和MapRece和模块细节,这个时候可以结合源码深入理解,以及实现机制。
最后就是需要实战了,可以结合自己的项目或者相关需求来完成一些hadoop相关应用。
(5) 大的文件拆分成很多小的文件后,怎样用Hadoop进行高效的处理这些小文件?以及怎样让各个节点尽可能的负载均衡?
1. 怎样用Hadoop进行高效的处理这些小文件?
你这个问题提的很好,hadoop在处理大规模数据时是很高效的,但是处理大量的小文件时就会因为系统资源开销过大而导致效率较低,针对这样的问题,可以将小文件打包为大文件,例如使用SequcenFile文件格式,例如以文件签名为key,文件内容本身为value写成SequcenFile文件的一条记录,这样多个小文件就可以通过SequcenFile文件格式变为一个大文件,之前的每个小文件都会映射为SequcenFile文件的一条记录。
2. 怎样让各个节点尽可能的负载均衡?
在hadoop集群中负载均衡是非常关键的,这种情况的导致往往是因为用户的数据分布的并不均衡,而计算资源槽位数确实均衡分布在每个节点,这样在作业运行时非本地任务会有大量的数据传输,从而导致集群负载不均衡,因此解决不均衡的要点就是将用户的数据分布均衡,可以使用hadoop内置的balancer脚本命令。
对于因为资源调度导致的不均衡则需要考虑具体的调度算法和作业分配机制。
(6)c/c++ 程序员如何入门Hadoop到深入了解,并在Linux服务器上布置运用,有没有方向性的指导?
针对C/C++用户,Hadoop提供了hadoop streaming接口和pipes接口,hadoop streaming接口以标准输入和标准输出作为用户程序和hadoop框架交互的中间件,pipes这是专门针对C/C++语言的接口,以socket作为同学中介。
从使用上建议从streaming入手,pipes相比streaming问题比较多,而且pipes调试不容易。
(7)现在企业中使用Hadoop版本主要是1.x还是2.x?
目前网络,腾讯,阿里为主的互联网公司都是以hadoop 1.X为基准版本的,当然每个公司都会进行自定义的二次开发以满足不同的集群需求。
2.X在网络内部还没有正式使用,还是以1.X为主,不过网络针对1.X的问题开发了HCE系统(Hadoop C++ Expand系统)
补充,Hadoop2.x在其他公司应用的很多,比如京东
(8)以后想从事大数据方面工作,算法要掌握到什么程度,算法占主要部分吗?
首先,如果要从事大数据相关领域的话,hadoop是作为工具来使用的,首先需要掌握使用方法。可以不用深入到hadoop源码级别细节。
然后就是对算法的理解,往往需要设计到数据挖掘算法的分布式实现,而算法本身你还是需要理解的,例如常用的k-means聚类等。
(9)现在spark,storm越来越火,谷歌也发布了Cloud Dataflow,是不是Hadoop以后主要应该学习hdfs和yarn,而且以后Hadoop程序员的主要做的就是把这些东西打包,只提供接口让普通的程序员也能使用,就像Cloudera和Google一样?
这位同学,你多虑了,hadoop和spark, strom是解决不同的问题,不存在哪个好那个坏,要学习Hadoop还是以主流的hadoop-1.X为版本,2.X最主要的就是多了yarn框架,很好理解的。
如果你是hadoop本身研发建议都看,如果你是hadoop应用相关研发,看主流的1.X就行,我的书《Hadoop核心技术》是以主流的1.X为版本讲解的,有兴趣可以看看。
(10)小白问一句,大数据处理都是服务器上安装相关软件吗,对程序有什么影响呢,集群、大数据是属于运维的工作内容还是攻城狮的呢?
传统的程序只能运行在单机上,而大数据处理这往往使用分布式编程框架编写,例如hadoop maprece,只能运行在hadoop集群平台上。
运维的责任:保证集群,机器的稳定性和可靠性
hadoop系统本身研发:提高Hadoop集群的性能,增加新功能。
大数据应用:把hadoop作为工具,去实现海量数据处理或者相关需求。
(11)学习hadoop该怎么入手呢?应该做一些什么样的项目呢?
可以参考我上面的几个回答,可以从最简单词频统计程序入手,然后学习理解HDFS和MapRece的基本原理和核心机制,如果仅仅把Hadoop作为一个工具来使用的话这样就可以了,最重要的就是实战了,可以尝试使用Hadoop处理一些数据,例如做日志分析,数据统计,排序,倒排索引等典型应用。
(12)100个以上hadoop节点,一般怎么开发,运维?任务很多的情况下任务资源怎么分配,任务执行顺序是定时脚本还是别的什么方式控制?
1. 首先大数据的应用开发和hadoop集群的规模是没有关系,你指的是集群的搭建和运维吗,对于商用的hadoop系统来说涉及到很多东西,建议参考《hadoop核心技术》实战篇 “第10章Hadoop集群搭建 ” 章节。
2. 任务的分配是有hadoop的调度器的调度策略决定的,默认为FIFO调度,商业集群一般使用多队列多用户调度器,可以参考参考《hadoop核心技术》高级篇 “第9章Hadoop作业调度系统” 章节。
3. 任务的执行顺序是有用户控制的,你自然可以定时启动,也可以手动启动。
(13)基于Hadoop做开发,是否必须会使用Java,使用其他开发语言是否无法更好的融入整个Hadoop的开发体系?
基于Hadoop做开发可以使用任何语言,因为hadoop提高了streaming编程框架和pipes编程接口,streaming框架下用户可以使用任何可以操作标准输入输出的计算机语言来开发hadoop应用。
(14)在rece阶段老是卡在最后阶段很长时间,在网上查的说是有可能是数据倾斜,我想问这个有啥解决方法吗?
1,你这个就是数据倾斜啊 好多数据都集中在一个rece里 其他rece里分配的数据比较少 默认情况下决定哪些数据分配到哪个rece是由rece个数和partiiton分区决定的 默认是对key进行hash运算 一般情况下用mapreuce倾斜很少 除非你用的HIVE
2,rece分为3个子阶段:shuffle、sort和rece,如果rece整个过程耗时较长,建议先看一下监控界面是卡在哪个阶段,如果是卡在shuffle阶段往往是网络阻塞问题,还有就是某rece数据量太大,也就是你所说的数据倾斜问题,这种问题往往因为某个key的value太多,解决方法是:第一,默认的partiiton可能不适合你的需求,你可以自定义partiiton;第二就是在map端截断,尽量让达到每个rece端的数据分布均匀。
(15)非大数据的项目能否用hadoop?
非大数据项目是否可以用Hadoop的关键问题在于是否有海量数据的存储,计算,以及分析挖掘等需求,如果现有系统已经很好满足当前需求那么就没有必要使用Hadoop,没有必要使用并不意味这不能使用Hadoop,很多传统系统能做的Hadoop也是可以做的,例如使用HDFS来代替LINUX NFS,使用MapRece来代替单服务器的统计分析相关任务,使用Hbase代替Mysql等关系数据库等,在数据量不大的情况下通常Hadoop集群肯定比传统系统消耗更多的资源。
(16)hadoop maprece 和第三方资源管理调度系统如何集成?
Hadoop的调度器设计的一个原则就是可插拔式调度器框架,因此是很容易和第三方调度器集成的,例如公平调度器FairScheler和容量调度器CapacityScheler,并配置mapred-site.xml的maprece.jobtracker.taskscheler以及调度器本身的配置参数,例如公平调度器控制参数则需要编辑fair- scheler.xml进行配置,具体可以参考我的新书《Hadoop核心技术》实战篇第十章节10.11的集群搭建实例中的10.10.9 配置第三方调度器,同时可以进一步深入学习第9章 Hadoop作业调度系统,在这一章中会详细介绍各种第三方调度器以及使用配置方法。

Ⅷ 请教flume如何将数据写入HDFS-Hadoop和大数据技术

Hadoop本身是分布式框架,如果在hadoop框架下,需要配合hbase,hive等工具来进行大数据计算。如果具体深入还要了解HDFS,Map/Rece,任务机制等等。如果要分析还要考虑其他分析展现工具。

大数据还有分析才有价值

用于分析大数据的工具主要有开源与商用两个生态圈。开源大数据生态圈:1、Hadoop HDFS、HadoopMapRece, HBase、Hive 渐次诞生,早期Hadoop生态圈逐步形成。2、. Hypertable是另类。它存在于Hadoop生态圈之外,但也曾经有一些用户。3、NoSQL,membase、MongoDb商用大数据生态圈:1、一体机数据库/数据仓库:IBM PureData(Netezza), OracleExadata, SAP Hana等等。2、数据仓库:TeradataAsterData, EMC GreenPlum, HPVertica 等等。3、数据集市:QlikView、 Tableau 、 以及国内的Yonghong Data Mart 。

热点内容
xp系统开机密码怎么设置 发布:2024-05-02 06:49:48 浏览:759
柱加密区公式 发布:2024-05-02 06:40:19 浏览:4
java字节转换 发布:2024-05-02 06:40:11 浏览:687
用c语言做的程序 发布:2024-05-02 06:26:10 浏览:325
解压用流量 发布:2024-05-02 06:21:46 浏览:316
云购源码系统 发布:2024-05-02 06:12:52 浏览:105
电脑如何进行安卓升级 发布:2024-05-02 06:10:08 浏览:37
元龙第5集免费看完整版缓存 发布:2024-05-02 06:03:47 浏览:668
脚本宣传片 发布:2024-05-02 05:56:26 浏览:570
有线投屏安卓手机如何设置 发布:2024-05-02 05:43:26 浏览:896