Hadoop布式系统基础架构,由Apache基金发用户解布式底层细节情况,发布式程序充利用集群威力高速运算存储Hadoop实现布式文件系统(Hadoop Distributed File System),简称HDFSHDFS着高容错性特点,并且设计用部署低廉(low-cost)硬件且提供高传输率(high throughput)访问应用程序数据,适合些着超数据集(large data set)应用程序HDFS放宽(relax)POSIX要求(requirements)流形式访问(streaming access)文件系统数据
‘贰’ hadoop web管理Hue,Ambari 和CM 的区别是什么
1.hue是什么?
hue是hadoop生态系统的统一webUI。你可以通过hue的界面,链接hive,发出hive语句。这个类似phpmysql。 你可以浏览hdfs的文件。 你可以定义oozie的工作流,可以写pig的脚本,可以配置zookeeper,可以可视化的配置kafka。总之,hue的目标就是作一个hadoop各种生态组建的webUI的平台。
hue既然是平台,那组件就是app。参考这里。App Store | Hue
我未来的工作会读hue的 python代码,挖掘更多hue的功能。国内有hue的玩家,或者感兴趣的玩家,欢迎一起交流噢。
2.clouera manager。
是管理hadoop集群运维的webUI。你可以用cloudera manager在集群中,简单的搭建hadoop,hbase集群。通过cloudera manager,你能看到哪些datenode结点和namenode 结点联结有问题了,哪些磁盘快满了,哪些cpu高,哪些磁盘io高。等等。 当你有个datenode的一块硬盘坏了时,你可以在cm中轻松的把这个datenode先停止工作,然后把结点移除。在磁盘修好了之后,再添加回集群。 当你新添加了一批机器,需要运行集群负载平衡的指令时,cm也能简单满足。 cloudera manager的用处,是用来简化hadoop运维人员的工作门槛的,webUI所见所得,提高效率。
更详细的clouderamanager介绍,就去cm的官网撸文档吧。Cloudera QuickStart
3.ambari
做hadoop商业化的公司,有3家比较大的。cloudera manager 、 hortonworks、mapR.
这里是个简单的对比 Cloudera vs. Hortonworks vs. MapR
一句话。cloudera manager的自家管理套件就是同名的cm。 ambari是hortonworks公司的,纯开源的用来对标cm的hadoop生态管理套件。
‘叁’ hadoop适合asp.net php吗
不知道你具体想做啥,hadoop是数据分析软件,并不适合当做网页运行
‘肆’ hadoop是干什么用的
提供海量数据存储和计算的。需要java语言基础。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
Hadoop的框架最核心的设计就是:HDFS和MapRece。HDFS为海量的数据提供了存储,而MapRece则为海量的数据提供了计算。
(4)hdfsphp扩展阅读
Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。能够对大量数据进行分布式处理的软件框架Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
‘伍’ 如何使用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搭建大数据平台,前端页面展示可以使用thinkphp吗,
我们公司数据分析清洗是python 页面展示是tp3
‘柒’ 用php做了一个本地数据库搜索网页,但是不知道如何把这个网页和Hadoop连接上,求解!
Hadoop呵呵 不知道你是为了实现什么,但是我觉得有点多此一举把。普通的网站的话还是用不着的呀。
‘捌’ phpHiveAdmin是如何通过Hive/Hadoop工作的
二、phpHiveAdmin将HQL请求发送给HAproxy负载的Hive server集群。三、phpHiveAdmin读取Metadata的数据,注意这里是只读,并不存在对Metadata的读写。因为元数据非常重要,涉及到底层数据的正确性,所以不能随意修改。四、phpHiveAdmin目前可以通过Fuse-DFS的方式浏览HDFS中的文件五、被分配到HQL任务的某个Hive Server,将HQL转换为Map/Rece的job,并提交给HDFS,进行计算。六、HDFS将job分配map,提交到大数据云,也就是datanode节点中进行计算,并将计算结果rece,提交给Hive server,Hive server将结果返回给phpHiveAdmin。七、phpHiveAdmin 执行ETL任务,将计算结果直接存储到Mysql中,提交给展示层应用查询,并生成用户友好的数据报表。注释:小云是HAProxy所做的Hive server集群,负载均衡以适应并发查询的要求。由于找不到合适的图标,就拿小云彩代替了。
‘玖’ 大数据怎么入行 做了两年php研发,现在想转做大数据,没什么经验,想入行的话,hadoop和数据
大数据对于我们这些从业者来说,是不太喜欢说的一个词。所谓内行看门道,外行看热闹,大数据这两年风风火火,大家都争先恐后的讨论着,但说到如何掌握或者运用,很多人是不知所措的。
私以为,大数据的核心在三个地方:数学+计算机知识+业务
先说说题主说到的编程,我在这里将它纳入计算机知识这一部分,因为编程对于我们来说只是大数据的冰山一角。这两年大数据的发展,绝对不是因为编程语言的进步,很大一部分是由于计算机工具的进步或者硬件的提升。 尤其是现在计算机硬件价格的下跌,以及大数据处理工具的发展,如hadoop,spark等,带来了数据处理能力的飞速提升,才导致了现在大数据的越来越火。
至于我们说的数据挖掘知识和编程语言,这些都是很早以前就已经存在的知识,这几年也没有得到很令人惊喜的新进展(我说的是知识本身,不是指应用)。
总之: 大数据之所以得到人们关注,最重要的是数据处理工具的进步以及数据量的累积(尤其是互联网)
那么是不是说明 掌握编程或者计算机工具就是迈入大数据的关键路径呢?
答案:显然不是,数学才是真正的核心知识。
没错,数学是在数据挖掘领域非常重要的甚至是核心的部分,编程只是工具,真的只是工具。 编程语言有好几十种吗,但是数据挖掘理论知识就那儿点。 你用任何一门语言去实现你的数学思想便可以达到数据挖掘的目标。 学术研究甚至可以抛弃编程,完全只研究算法(注意:这样的话会容易造成纸上谈兵)。